Page 1 sur 1

tri selon une séquence définie

Posté : 24 juil. 2012, 22:58
par Invité
Bonsoir,

Je souhaiterais faire un tri alphabétique à partir de la 2ème ligne d'une table. Le première ligne de la table (record 1) doit cependant toujours être bien visible en 1ère ligne.

Sans succès, j'ai d'abord tenté avec UNION :
(SELECT * from `rub_1` WHERE `id_p1`=1 )
UNION
(SELECT * FROM `rub_1` WHERE `id_p1`!=1 ORDER BY `r_1` ASC)

Faut-il nécessairement passer par 2 requêtes bien séparées pour obtenir des données triées selon l'ordre particulier (1ère ligne, puis toutes les autres lignes sont triées par ordre alphabétique) ?

Merci de votre avis.

Re: tri selon une séquence définie

Posté : 25 juil. 2012, 10:41
par DiurnaSys
Bonjour,

Si j'ai bien compris tu veut afficher la première ligne sans tri et la seconde triée ?
(Tu n'aurais pas oublié le "FROM" dans tes requêtes ?)
SELECT Ligne1, Ligne2
FROM TaTable
ORDER BY Ligne2 ASC
;
Cordialement.

Re: tri selon une séquence définie

Posté : 25 juil. 2012, 12:24
par Neophyte
Bonjour,

Un petit exemple pour être plus explicite :

id tit
----------------------
0 rouge
1 violet
2 orange
3 jaune
4 bleu


L'idée, c'est qu'après une seule requête, on retrouve les résultats selon le tri ci-dessous (ordre alphabétique dès 2ème ligne)

id tit
----------
0 rouge
4 bleu
3 jaune
2 orange
1 violet

Merci.

Re: tri selon une séquence définie

Posté : 25 juil. 2012, 14:33
par DiurnaSys
Rebonjour,

EDIT : Mal compris la question donc réponse hors de propos.

Cordialement.

Re: tri selon une séquence définie

Posté : 25 juil. 2012, 14:34
par moogli
salut,

as tu essayé de jouer avec la clause having ? (et pourquoi pas le rownum si tu utilise oracle).


@+

Re: tri selon une séquence définie

Posté : 25 juil. 2012, 17:16
par Neophyte
Bonjour,

J'utilise Mysql. Que pourrais-je faire avec la clause having dans ce cas-là ?

En l'état, je vois que 2 requêtes et retravailler mon tableau avec php...

Merci.

Re: tri selon une séquence définie

Posté : 09 août 2012, 12:22
par Neophyte
Bonjour,

Finalement, j'ai passé par 2 requêtes séparées pour obtenir des données triées selon l'ordre particulier (1ère ligne imposée, puis toutes les autres lignes sont triées par ordre alphabétique).

En effet, avec un requête de type UNION, l'ordre n'est pas adéquat.

(SELECT * from `rub_1` WHERE `id_p1`=1 )
UNION
(SELECT * FROM `rub_1` WHERE `id_p1`!=1 ORDER BY `r_1` ASC)


=========================
id---------------------- tit
=========================
0---------------------- rouge
1---------------------- violet
2---------------------- orange
3 ----------------------jaune
4 ----------------------bleu


L'idée, c'est qu'après une seule requête, on retrouve les résultats selon le tri ci-dessous (ordre alphabétique dès 2ème ligne)
=========================
id---------------------- tit
=========================
0---------------------- rouge
4 ----------------------bleu
3 ----------------------jaune
2 ----------------------orange
1 ----------------------violet

Re: tri selon une séquence définie

Posté : 09 août 2012, 12:46
par Zahnzao
Salut,

je ne comprend pas bien ce que tu veux dire par 2ème ligne. Mais il y'a le ORDER BY FIELD qui existe.
SELECT * from rub_1 ORDER BY FIELD(tit,'rouge','bleu','jaune','orange','violet')
;)

edit: ok j'ai compris... Donc
SELECT * from rub_1 ORDER BY FIELD(tit,'rouge') DESC, tit ASC
Edit: manquait le DESC

Re: tri selon une séquence définie

Posté : 09 août 2012, 12:49
par xTG
Comme le disait moogli pourquoi n'essaies-tu pas avec having pour appliquer ta clause ORDER sous condition ?
SELECT * FROM `rub_1` HAVING `id_p1`!=1 ORDER BY `r_1` ASC
Concernant le n-uplet d'id 1 il me semble qu'avec une telle requête il sortira en premier s'il est le premier enregistré dans la table et sinon à la fin s'il est au sein des autres n-uplet ou en fin.

Re: tri selon une séquence définie

Posté : 09 août 2012, 14:09
par Mazarini
Peut être :
SELECT * FROM rub_1 ORDER BY IF(id_p1=1, 0,1), r_1

Re: tri selon une séquence définie

Posté : 09 août 2012, 14:18
par Neophyte
Merci à Zahnzao et xTG pour votre aide.

La solution de Zahnzao me semble parfaite

SELECT `r_id`, `r_0` as `r` FROM `r_1` ORDER BY FIELD(`r_id`,'0') DESC, `r` ASC.

=D>

Re: tri selon une séquence définie

Posté : 09 août 2012, 14:29
par Zahnzao
A noter que j'avais oublier le DESC au départ, j'ai édité pour l'ajouter.

En effet lorsque tout les champs possibles sont renseignés dans le FIELD(table,'field1','field2','field3'), il sont trié correctement.

Par contre s'il reste des champs qui ne sont pas dans le FIELD, ils passent avant... Etrange comme comportement. C'est pour cela que j'ai rajouté le DESC après avoir testé.

Par exemple si tu avais 2 champs imposés avant ton triage alpha, cette méthode n'aurait pas fonctionné. Faisant passer le champ 2 avant le champ 1 à cause du DESC.

http://www.electrictoolbox.com/mysql-or ... ld-values/

Bref, ca fonctionne, tant mieux ;)

Re: tri selon une séquence définie

Posté : 09 août 2012, 14:52
par Neophyte
Super. Encore merci.