Forcer le tri des résultats selon les références en clause 'IN'
4 réponses
.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 ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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: ******************
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:brouardf@club-internet.fr ******************
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: ******************
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
Dans le message:efSZCY6eDHA.2152@tk2msftngp13.phx.gbl,
.merlin <neNOwsaSPlaAMska@nxPLEASEtg.net> 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
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
.merlin
> Utiliser un Case (...) as nbordre et un order by nbordre ?
Pas pensé à ça.. = )
> Utiliser un Case (...) as nbordre et un order by nbordre ?