Aller au contenu

Sujets conseillés

Posté (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 B)

Modifié par fat-freddy
Posté

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)

Posté

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 ?

Posté

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.

Posté

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.

Posté

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

Posté (modifié)

Si tu ne fais pas des tris croissants ou décroissants, tu peux pas vraiment trier avec un "order by" en sql.

Modifié par petit-ourson
Posté

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.

Posté

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

Posté

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.

Posté

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.

Posté

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 !

Veuillez vous connecter pour commenter

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



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