Aller au contenu

SQL classement d"une requéte


fat-freddy

Sujets conseillés

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)

Modifié par fat-freddy
Lien vers le commentaire
Partager sur d’autres sites

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)

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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 :/

Lien vers le commentaire
Partager sur d’autres sites

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,  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.

Lien vers le commentaire
Partager sur d’autres sites

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 :P

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...