fat-freddy
jeudi 2 février 2006 à 19:58
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 B)
petit-ourson
jeudi 2 février 2006 à 20:58
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
jeudi 2 février 2006 à 21:22
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
jeudi 2 février 2006 à 21:23
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
jeudi 2 février 2006 à 21:26
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
jeudi 2 février 2006 à 21:27
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
jeudi 2 février 2006 à 21:30
Si tu ne fais pas des tris croissants ou décroissants, tu peux pas vraiment trier avec un "order by" en sql.
loban
jeudi 2 février 2006 à 22:28
Tu peux t'en sortir en ajoutant une colonne de tri interne dans ta requête avec des opérateur IF.
Exemple :
SQL
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, date
FROM 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
jeudi 2 février 2006 à 22:29
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 :
CODE
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
jeudi 2 février 2006 à 22:32
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
vendredi 3 février 2006 à 09:24
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
vendredi 3 février 2006 à 11:05
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
vendredi 3 février 2006 à 17:09
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 !
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez
cliquer ici.