Requête sur 2 champs d'une même base.

Signaler
Messages postés
16
Date d'inscription
lundi 28 janvier 2008
Statut
Membre
Dernière intervention
2 novembre 2010
-
Messages postés
318
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
11 mars 2010
-
Bonjour,

je souhaite lister le résultat d'une requête portant sur 2 champs (theme1 et theme2) d'une meme base.
J'ai essayer ça mais le theme 2 ne se classe pas par odre alphabétique :
[i]
$res = mysql_query("SELECT * FROM produits ORDER BY theme1,theme2");
while($row = mysql_fetch_assoc($res))
{
echo $row["theme1"];
echo "
";
echo $row["theme2"];
echo "
";
}/i

Et comment n'afficher qu'une fois un thème si il est présent plusieurs fois dans les champs.

Merci.

4 réponses

Messages postés
318
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
11 mars 2010

Bonjour,

La partie de requête "ORDER BY theme1, theme2" signifie que les résultats vont être triés par le champs "theme1" et pour ceux ayant le même theme1 le tri se fera sur le champ theme2.

Par exemple si tu as 4 enregistrements ayant pour theme1 et theme2 :

1) A,Z
2) A,G
3) C,A
4) B,D

l'ordre sera : 2,1,4,3 parce que les enregistrement 1 et 2 ayant un theme1 'A' ils sont en premiers, suivi du 4 qui a un theme1 à 'B' et enfin le 3 qui a un theme1 à 'C'. Pour ordonner le 1 et le 2, c'est le theme2 qui est utilisé : 2 est donc avant 1.


Pour n'afficher le theme1 que s'il n'a pas déjà été affiché, tu peux enregistrer dans une variable le dernier theme1 affiché et si celui de la boucle est différent tu l'affiches (et tu met à jour la variable), sinon tu ne l'affiche pas.



Grrrrrrrrrrr
Messages postés
16
Date d'inscription
lundi 28 janvier 2008
Statut
Membre
Dernière intervention
2 novembre 2010

Dans ce cas n'est-il pas mieux de 'fusionner' virtuellement les 2 champs avant, afin que la requête ne s'applique que sur une seule liste ?
Messages postés
16
Date d'inscription
lundi 28 janvier 2008
Statut
Membre
Dernière intervention
2 novembre 2010

La solution était :

SELECT DISTINCT(theme1) as theme FROM produits
UNION
SELECT DISTINCT(theme2) as theme from produits
ORDER BY theme
Messages postés
318
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
11 mars 2010

Avec le distinct on ne peut pas obtenir tous les produits. On a un enregistrement par type.


Grrrrrrrrrrr