OVH Cloud OVH Cloud

Forcer le tri des résultats selon les références en clause 'IN'

4 réponses
Avatar
.merlin
Bonjour,

D'avance je suis désolé si cette question a été posée mais les recherches se font
sur des mots trop génériques dans les moteurs de recherche et je n'arrive pas à
trouver de réponse.

J'ai implémenté un algorithme pour extraire des données en arbre et j'obtiens une
chaine de références formattée classée par ordre d'apparition dans mon application.

En gros:

SELECT * FROM donnees WHERE id IN (3,6,8,2,12,1,7,9);

Comme vous pouvez le constater, les références sont classées dans un ordre
bien précis. SQL 2000 Server me retourne cependant cette requête en la classant
par 'id' sans que je ne le lui demande explicitement. D'après mon livre, la clause
'IN' ne spécifie qu'un tri logique de type 'OU' et rien d'autre, donc compromet ma
tentative de classification.

La seule issue à cela me paraissant possible est d'utiliser une table temporaire
à chaque fois que je procède à cette extraction de données. Je ne trouve pas cela
très 'propre' et cela m'embête au niveau des performances pour plus tard.

La question: y a t'il d'autres moyens d'imposer cet ordre précis dans ma requête ?

.merlin

4 réponses

Avatar
Fred BROUARD
1) utilise pour cela une union
SELECT *, 1 AS ORDRE
FROM donnees WHERE id = 3
UNION
SELECT *, 2 AS ORDRE
FROM donnees WHERE id = 6
...
ORDER BY ORDRE

2) s'il s'agit d'un arbre, modélise le per intervalle. Tout tes
problémes seront résolus : aucune nécessité de récurisivité et maitrise
du tri.

A lire :
http://sqlpro.developpez.com/Tree/SQL_tree.html

A +


.merlin a écrit:
Bonjour,

D'avance je suis désolé si cette question a été posée mais les recherches se font
sur des mots trop génériques dans les moteurs de recherche et je n'arrive pas à
trouver de réponse.

J'ai implémenté un algorithme pour extraire des données en arbre et j'obtiens une
chaine de références formattée classée par ordre d'apparition dans mon application.

En gros:



> SELECT * FROM donnees WHERE id IN (3,6,8,2,12,1,7,9);

Comme vous pouvez le constater, les références sont classées dans un ordre
bien précis. SQL 2000 Server me retourne cependant cette requête en la classant
par 'id' sans que je ne le lui demande explicitement. D'après mon livre, la clause
'IN' ne spécifie qu'un tri logique de type 'OU' et rien d'autre, donc compromet ma
tentative de classification.

La seule issue à cela me paraissant possible est d'utiliser une table temporaire
à chaque fois que je procède à cette extraction de données. Je ne trouve pas cela
très 'propre' et cela m'embête au niveau des performances pour plus tard.

La question: y a t'il d'autres moyens d'imposer cet ordre précis dans ma requête ?

.merlin






--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************
Avatar
.merlin
Bonjour,

Merci pour le lien ! Je vais voir tout ça !

.merlin
Avatar
Pierre Goiffon
Dans le message:,
.merlin a écrit:
SELECT * FROM donnees WHERE id IN (3,6,8,2,12,1,7,9);

Comme vous pouvez le constater, les références sont classées dans un
ordre
bien précis. SQL 2000 Server me retourne cependant cette requête en
la classant par 'id' sans que je ne le lui demande explicitement.



Utiliser un Case (...) as nbordre et un order by nbordre ?

--
_________________________________________________________
/
. Pierre GOIFFON .
. p g o i f f o n @ w e b c i t y . f r .
_________________________________________________________/
Un grand merci à OE Quote Fix pour rendre OE utilisable :)
=> http://home.in.tum.de/~jain/software/quotefix.php
Avatar
.merlin
> Utiliser un Case (...) as nbordre et un order by nbordre ?


Pas pensé à ça.. = )