Requete order by

Fermé
rtr - 2 sept. 2009 à 17:20
 rtr - 7 sept. 2009 à 11:46
Bonjour,
J'ai une table1 de genre qui a deux champs
id , couleur. et une autre 3 champs id, id_couleur, province
Est ce qu'il y a une requete qui affiche la province par couleur alterner?
(si on fait ORDER by table1.id c'est qu'il affiche une liste de même couleur puis changer une autre mais ce que je veux c'est une liste qui a : province 1 rouge, province2 blanc, province3 vert,
province4 rouge,province5 blanc.province6 vert,
province7rouge ,...)
Merci de votre aide.

11 réponses

kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
2 sept. 2009 à 17:31
Bonjour,

Tes explications est un peu cafouillies je trouve :)

Pour résumé, tu as deux tables :
- la table 'couleur' ayant pour champs : id, couleur (libellé de la couleur)
- la table 'province' ayant pour champs : id, id_couleur (fait référence à 'id' de la table 'couleur') et province (libellé de la province)

Juste une questions : dans ton système d'information (on appelle ça comme ça ^^), est ce qu'une province peut avoir plusieurs couleurs (je pose la question car j'ai l'impression que oui, et si c'est le cas tu as mal fait tes tables -> je te dirai quoi alors)
0
bonjour,
merci pour votre aide,
un province correspond toujours à un seul couleur mais plusieurs province peuvent avoir une meme couleur
merci pour votre aide
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
3 sept. 2009 à 14:16
Ok, peux-tu préciser un peu mieux et surtout de manière claire et précise le résultat que tu souhaites obtenir après ta requête SQL effectuée ?
0
Bonjour,
merci d'être intéressé à mon problème,
le but de mon projet est d'afficher une liste de province dans une page mais que sa couleur soit alterner en fonction de l'ordre et le nombre (id) de couleur dans la table 1 par exemble
dans la table province on a la liste suivant, a b c d e f g h i j k l m n o
et dans la table couleur on a 1 2 3 4
l'un des possibiltés de l'affichage finale est donc comme suit
a1, d2 , b3, g4, c1, m2,o3,i4 ,...
en général nous utilisons order by champ pour avoir un affichage groupe par champ mais qu'on affiche tout les premier ligne du champ (ici donc tout les couleur ou son id =1) puis du 2 et ainsi de suite mais ce que je veux c'est qu'il fait un boucle mais respecter l'ordre de l'id.
++
rtr
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
4 sept. 2009 à 10:31
Re,

Ok, ce que tu souhaites faire n'est pas faisable par une simple requête, du moins je ne vois pas comment.
Pourquoi ?
Surtout par Order by, ce n'est pas possible puisque dans la suite de ton résultat attendu, tu as deux valeurs de tri possible : l'id de la province et l'id de la couleur.
Or dans le résultat escompté tu n'as ni Id de province, ni Id de couleur dans l'ordre. Un Order by permet de trier les résultats par ordre.

Admettons que tu mettes un ORDER BY id des provinces, tu auras alors tes résultats comme suit (pour reprendre ton exemple):
a1, b3, c1, d2 , ... , g4, ...

Si tu fais un ORDER BY id des couleurs, tu auras alors tous les 1 en premier, puis les 2, 3 et 4.
Enfin, si tu fais un ORDER BY sur les deux id, l'ordre dans lequel tu défini les critères du ORDER BY influt sur le tri.
Par exemple, ORDER by id_couleur, id_province donnera :
a1, c1, d2, b3, g4
ORDER BY id_province, id_couleur ne donnera rien de plus que ORDER BY id_province puiqu'une province n'a qu'une seule couleur et n'intervient qu'une seule fois dans ta table. (province unique)

Tu vois donc bien que via ORDER BY, ton résultat n'es pas possible.

Je pense que tu es obligé de passer par un script PHP pour arranger ton résultat comme tu le souhaite.
Par exemple, si tu fais une requête de sélection avec ORDER BY id_couleurs, id_province, tu auras alors la liste des provinces rangée par ordre des couleurs.
Rien ne t'emêche de récupérer ce résultat sous forme de 4 tableaux en PHP (1 par couleur)
Il ne te restera ensuite plus qu'à boucler sur ton tableau le plus grand pour afficher à chaque itération la case de chacun des 4 tableaux (attention, pour chaque tableau, n'afficher que si le compteur de l'itération courante ne dépasse pas la taille du tableau en question !)

Si tu as des questions sur la mise en place PHP de cette solution (si tu n'y arrive pas), je reste à ta dispo, pour le reste je ne peux pas t'aider plus.
0
c'est très simpa de me donner cet sol mais mon problème en plus c'est que j'ai utilisé une pagination pour l'affichage et que chaque devrait avoir plus de couleur que possible . Or lors lors d'une pagination on s'interesse au limit de la requete
m'aider
rtr
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
4 sept. 2009 à 13:09
Peux-tu reformuler ton post précédent avec un grammaire correcte (ne pas oublier de mot, faire des phrases compréhensibles), merci ^^
0
En fait mon problème c'est que j'utilise en même temps une pagination pour afficher le résultat.
alors quand je l'utilise j' essaie de découper la requete de genre 'select * from table LIMIT 0,5
en dynamisant le LIMIT 0,5 et comment pourais-je afficher 5 provinces différentes par éxemple sur une page ,
rtr
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
4 sept. 2009 à 14:42
Ha ok,

Si tu optes pour la solution que j'ai donné, tu peux gérer ça en javascript, mais c'est déjà techniquement un peu plus poussé.
Il te faut enregistrer tes résultats sous forme de liste d'objet. Les objets en question sont à créé toi même, par exemple un objet 'province' dans lequel tu as trois propriété : id_province, libellé_province, couleur

Pour remplir ces objets, comme ta requête et ton traitement de requête se fait en PHP, le mieux est alors d'utiliser Ajax et les objets XHR.
Tu appele ton script PHP de traitement SQL + transformation depuis un objet XHR javascript, ainsi le retour du script PHP pourra être interprété en Javascript directement sur ta page.
Ton script PHP devra alors, en même temps qu'il traite des requêtes SQL, écrire "en sortie" (c'est à dire via des echo "..."; ) du pseudo code javascript pour construire dynamiquemenent cette liste d'objet.
Chaque objet ayant donc les informations issue de tes requêtes.

Ensuite, il te restera à "manager" cette liste d'objet en javascript pour l'afficher par page. (par exemple gérer un compteur de page pour afficher de x à y les objets (et donc tes résultats de requête).

J'ai déjà fait un système analogue, mais c'est vrai que c'est une solution assez poussée techniquement et un brin trop complexe pour faire la "simple" chose que tu souhaites.
Peut-être y a-t-il une solution plus simple que celle-ci (et je l'espère pour toi).

Pour ce qui est des objets XHR javascript, si tu ne sais pas ce que c'est, je te propose de regarder l'astuce suivante :
https://www.commentcamarche.net/faq/18745-utilisation-de-l-objet-xmlhttprequest
0
Bonjour,
Merci pour la réponse,
je ne connait pas sur ajax pour le moment , mais je vais voir ton url . s'il n'y a pas d'autre solution sur sql je vais mettre mon projet en stand by .
++
merci
0
Bonjour,
Merci pour la réponse,
je ne connait pas sur ajax pour le moment , mais je vais voir ton url . s'il n'y a pas d'autre solution sur sql je vais mettre mon projet en stand by .
++
merci
0