tri selon une séquence définie

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : tri selon une séquence définie

Re: tri selon une séquence définie

par Neophyte » 09 août 2012, 14:52

Super. Encore merci.

Re: tri selon une séquence définie

par Zahnzao » 09 août 2012, 14:29

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

par Neophyte » 09 août 2012, 14:18

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

par Mazarini » 09 août 2012, 14:09

Peut être :
SELECT * FROM rub_1 ORDER BY IF(id_p1=1, 0,1), r_1

Re: tri selon une séquence définie

par xTG » 09 août 2012, 12:49

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

par Zahnzao » 09 août 2012, 12:46

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

par Neophyte » 09 août 2012, 12:22

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

par Neophyte » 25 juil. 2012, 17:16

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

par moogli » 25 juil. 2012, 14:34

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

par DiurnaSys » 25 juil. 2012, 14:33

Rebonjour,

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

Cordialement.

Re: tri selon une séquence définie

par Neophyte » 25 juil. 2012, 12:24

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

par DiurnaSys » 25 juil. 2012, 10:41

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.

tri selon une séquence définie

par Invité » 24 juil. 2012, 22:58

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.