fat-freddy Posté 2 Février 2006 Posté 2 Février 2006 (modifié) Bonjour à tous ! Voila mon problème, j'ai une table avec les champs : nom | type | date Le type pouvant être : type1, type2, type3, type4 Je souhaiterai classer mes résultats de la requéte par date puis déterminer un ordre en fonction du type, c'est à dire mettre les type2 en premier puis type3, type4 et type1, lorque la date est la même. Comment faire comprendre cela à la clause WHERE ?? J'espére avoir été clair, par avance merci Modifié 2 Février 2006 par fat-freddy
petit-ourson Posté 2 Février 2006 Posté 2 Février 2006 Tu pourras pas en une seule table, il faut que tu "déportes" ton type dans une autre table et que tu gère une position de type soit un truc comme ca : Table_1 : nom | id_type | date Table_2 : id_type | position et après tu fais une requête du type : SELECT T1.nom, T1.id_type, T1.date FROM Table_1 T1 INNER JOIN Table_2 T2 ON T1.id_type = T2.id_type ORDER BY T1.date, T2.position Enfin un truc dans cet optique car c'est encore l'heure de l'apéro et je suis pas sûr de ne pas metre planté ;o)
fat-freddy Posté 2 Février 2006 Auteur Posté 2 Février 2006 Héhé merci, mais a vrai dire cette solution ne m'arrange pas du tout Etes vous sur qu'il n'y en a pas d'autre possible compte tenu de l'organisation de ma BDD ?
steph13 Posté 2 Février 2006 Posté 2 Février 2006 Heu, si, ca doit pouvoir se faire... Avec une requête du type "select distinct date" et "group by type order by type desc" par exemple. J'ai pas la requête sql exact en tête, mais cherche dans cette direction la.
petit-ourson Posté 2 Février 2006 Posté 2 Février 2006 Comment tu peux dire que le type2 passe avant le type3 mais après le type4 qui est lui devant le type 1. de toute façon, j'ai du mal a comprendre pourquoi tes types ne sont pas dans une table séparée.
Sarc Posté 2 Février 2006 Posté 2 Février 2006 Euh, tu peux trier comme ça en mettant ORDER BY colonne1, colonne2, colonne3... Je suis quasiment sûr que ça marche comme ça, je vois pas pourquoi faire plusieurs requètes :/
petit-ourson Posté 2 Février 2006 Posté 2 Février 2006 (modifié) Si tu ne fais pas des tris croissants ou décroissants, tu peux pas vraiment trier avec un "order by" en sql. Modifié 2 Février 2006 par petit-ourson
loban Posté 2 Février 2006 Posté 2 Février 2006 Tu peux t'en sortir en ajoutant une colonne de tri interne dans ta requête avec des opérateur IF. Exemple : SELECT IF(type='type1',4,0)+IF(type='type2',1,0)+IF(type='type3',2,0)+IF(type='type4',3,0) as coltri, nom, type, dateFROM latable ORDER BY 1 En fait, tu crées une colonne avec un remplacement de valeur pour qu'il corresponde au tri que tu souhaites. Dans l'exemple, type2 arrivera en 1° position et type1 en dernière.
Sarc Posté 2 Février 2006 Posté 2 Février 2006 Ah oui j'avais pas vu qu'il voulait trier dans l'autre sens.. mea culpa ! Moi j'avais fait un truc bizarre pour trier dans un autre sens.. Exemple : SELECT id, pseudo, type=2 AS flag1, type=4 AS flag2, [....], date order by date, flag1, flag2 [...] Ca marchait à peu près correctement comme ça... Tu peux toujours tenter ! Edit : j'ai été grillé par une idée plus intéressante.. je connais pas encore assez bien sql
petit-ourson Posté 2 Février 2006 Posté 2 Février 2006 N'"mpêche que je reste persuadé que dans le MLD c'est pas logique d'avoir le type à ce niveau là ;o) Le IF est-il standardisé ??
Anonymus Posté 3 Février 2006 Posté 3 Février 2006 je suis d'accord avec Petit-ourson, tu devrais modéliser la base en tenant compte du fait que l'ordre ne peut être stocké dans la même base que le type lui-même.
petit-ourson Posté 3 Février 2006 Posté 3 Février 2006 Ah oui bon pour ceux que ça intéresse, le IF n'existe pas sous MS SQLServer donc on peut facilement remplacer par un CASE WHEN THEN bien que l'écriture de cette condition soit différente sous Oracle.
fat-freddy Posté 3 Février 2006 Auteur Posté 3 Février 2006 Merci pour toutes vos réponses les gars, je vais esayer la solution de loban et si je ne m'en sors pas comme cela je réorganiserai ma base.. mais bon ca reviendrai à refaire tout le site aussi !
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant