Page 1 sur 1

Requete SQL sur sois même

Posté : 16 juin 2006, 14:23
par loopkin
Bonjour,

une requete que ej n'arrives aps a mettre en place :

une table ville
champs : id_ville, nom, code_agglo

code_agglo est égal à id_ville de l'agglo a laquelle appartient une ville.

Le but est d'obtenir, connaissant l'id_ville d'une ville la liste de toutes les villes appartenant a la même agglo.

Le résultat devrias avoir l'aspect suivant :
nom(ville), nom(agglo)

(bien sur nom agglo est le même sur chaque ligne vue la requete).

Je suis en MySQL 4.

Quelqu'un a une piste ?

Merci

Posté : 16 juin 2006, 14:34
par guilt92
code_agglo est égal à id_ville de l'agglo a laquelle appartient une ville.
:shock: :shock:

Désolé je comprend pas. Tu as une table agglo qui associe le nom de l agglomeration a son code_agglo ? Essaye d etre un peu plus précis stp en tout cas moi j ai pas compris :(

Posté : 16 juin 2006, 14:40
par ouckileou
Ben ça a l'air simple :

Code : Tout sélectionner

SELECT id_ville, nom FROM villes WHERE code_agglo = <code>
Après pour récupérer à chaque fois le nom de l'algo faudrait compliquer la chose mais est-ce réellement utile ?

Un petit test à la sortie pour voir à quelle ligne id_ville = code_agglo et tu l'auras

Posté : 16 juin 2006, 14:46
par loopkin
Essaye d etre un peu plus précis stp en tout cas moi j ai pas compris :(
j'ai une seule table qui contient le code de chaque ville. Une ville peut appartenir a une agglomération, dans ce cas cette ville a un code agglo qui représente le code ville de la ville principale de l'agglomération.

id_ville, nom, code_agglo
1 villeA 3
2 villeB 3
3 villeC 3
4 villeD 6

L'affichage que je souhaite connaissant l'id_ville=2 est :
nom ville, nom agglo
villeA villeC
villeB villeC
villeC villeC

est ce que j'ai été plus claire ?

Merci

Posté : 16 juin 2006, 14:48
par loopkin
Après pour récupérer à chaque fois le nom de l'algo faudrait compliquer la chose mais est-ce réellement utile ?
Malheureusement oui, c'est utile, car là j'ai simplifié au maximum, d'autres colonnes sont a traitées.

Merci quand même.

Posté : 16 juin 2006, 14:53
par guilt92
tu dois absolument faire cela en 1 seule requete ? parce que en plus en MySQL 4 on ne peut pas faire de requetes imbriquées il me semble.

Posté : 16 juin 2006, 15:05
par ouckileou
c'est 4.1 les sous requêtes

Posté : 16 juin 2006, 15:15
par guilt92
ah ok désolé, ceci dit je verrai quand meme 2 requetes


1/ Récupérer le nom de l agglo :

Code : Tout sélectionner

SELECT nom FROM ville WHERE id=(SELECT code_agglo FROM ville WHERE id=$id)
2/ Récupérer toutes les villes

Code : Tout sélectionner

SELECT nom FROM ville WHERE code_agglo=(SELECT code_agglo FROM ville WHERE id=$id)
Ceci dit je suis fatigué y a peut etre plus simple :)

Posté : 16 juin 2006, 15:21
par ouckileou
La remarque est pas idiote puisqu'on ne sait pas exactement quelle version est utilisée
ah ok désolé, ceci dit je verrai quand meme 2 requetes
1/ Récupérer le nom de l agglo :

Code : Tout sélectionner

SELECT nom FROM ville WHERE id=(SELECT code_agglo FROM ville WHERE id=$id)
Ceci dit je suis fatigué y a peut etre plus simple :)
Pour celle-ci oui en effet :

Code : Tout sélectionner

SELECT id_ville, nom_ville AS nom_agglo FROM villes WHERE code_agglo = id_ville AND id_ville = 1

Posté : 16 juin 2006, 15:33
par loopkin
Merci pour ces pistes. Je vais vois si il y a moyen de passer en v4.1 ou v5 car ça semble dans ce cas nettement simplifier la vie.

Merci

Posté : 16 juin 2006, 16:18
par Henri
Cas hyper-classique : Il faut jouer avec les alias de tables pour pouvoir mettre deux fois la table ville dans la clause FROM. On appelera la table ville une fois v (pour ville) et une fois a (pour agglo) et on travaille comme si on avait deux tables distinctes v et a et une jointure entre ces deux "tables".
Ensuite, il faut également renommer les colonnes dans le select pour éviter d'avoir deux fois le même identifiant.

Code : Tout sélectionner

SELECT v.id_ville AS id_ville, v.nom AS nom_ville, a.id_ville AS id_agglo, a.nom AS nom_agglo FROM ville AS v, ville AS a WHERE v.code_agglo = a.id_ville

Posté : 16 juin 2006, 16:28
par ouckileou
Ah oui bien vu =D>

Posté : 16 juin 2006, 16:34
par Henri
Merci :oops:
15 ans de SQL derrière soi, même appris sur le tas, ça aide :)

Posté : 18 juin 2006, 15:51
par loopkin
Cas hyper-classique : Il faut jouer (...) le même identifiant.
Nickel Henri, merci beaucoup