ollvin Posté 13 Septembre 2006 Partager Posté 13 Septembre 2006 (modifié) Bonjour, Je travail sur des pages déjà codées (personnalisation du CMS Artiphp) qui récupèrent des données MySQL avec une requête SELECT sous PHP, puis les traite pour les afficher avec une boucle WHILE (mysql_fetch_array($result)). Un fonctionnement bien classique quoi. Jusque là, tout va bien. Mais cela fait plusieurs fois que je me heurte au même problème : je voudrais simplement affiner le classement des résultats sans toucher à l'affichage (donc laisser la boucle WHILE telle quelle). Jusqu'à présent, il sont simplement organisés par un ORDER BY champ dans la requete mais j'aimerais un classement plus complexe. Par exemple, les articles sont organisés par date. Je voudrais d'abord un classement numérique par le champ ordre, puis classer par date ce qui reste (pas d'ordre défini). Plus généralement, on retrouve un peu le principe de pertinence d'un moteur de recherche avec de multiples critères de classement (mais pas les mêmes, évidemment). Jusqu'à présent, il me faut faire deux requêtes, puis dupliquer complètement le traitement, ou tout recoder quand il faut mélanger les résultats. Bref, c'est vraiment pas pratique. Est-ce qu'on peut mettre plusieurs conditions à ORDER BY ou mettre plusieurs ORDER BY (même si cette synthaxe est incorrecte, je pense à un truc du genre : SELECT... WHERE (ordre!='0' ORDER BY ordre) and (ordre=0 ORDER BY date) ) ? Peut-être que ma logique ne colle pas du tout. Si un programmeur expérimenté peut venir éclairer ma lanterne... Merci d'avance Modifié 13 Septembre 2006 par ollvin Lien vers le commentaire Partager sur d’autres sites More sharing options...
captain_torche Posté 13 Septembre 2006 Partager Posté 13 Septembre 2006 Tu peux effectivement faire un "ORDER BY ordre ASC, date ASC". Le souci, c'est que si tes éléments "sans ordre" ont un ordre défini à zéro, ils ressortiront en premier (dans le cas d'un tri croissant). A tester : ne pas remplir le champ "ordre", voire le mettre à NULL Lien vers le commentaire Partager sur d’autres sites More sharing options...
ollvin Posté 15 Septembre 2006 Auteur Partager Posté 15 Septembre 2006 Super. J'étais sûr que la fonction devait exister. Pour le 0, je vais essayer une autre valeur. Merci. Lien vers le commentaire Partager sur d’autres sites More sharing options...
ollvin Posté 15 Septembre 2006 Auteur Partager Posté 15 Septembre 2006 Petite conclusion : En fait, vu que mon champ mySQL était un BIGINT, je ne pouvais pas mettre de valeur NULL. De toute façon, le plus simple a été de mettre une valeur par défaut énorme (9999999), comme ça, ça arrive toujours après mes classements. Voilà, ça marche comme sur des roulettes. Merci encore, captain_torche. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant