Les Allergies
Alimentaires
Posez votre question Signaler

[SQL] Optimisation de requête [Résolu]

saad0n87 - Dernière réponse le 28 févr. 2011 à 17:52
Bonjour,
J'ai un petit problème au niveau d'une requete SQL.
Je dispose d'une table matable qui possède un champ id qui est structuré de la façon suivante :
- Une lettre 'G','C','E','D' concaténée à un numéro de série . Ex:'C10006','G16547','E456','D1648','G1986'
Ce que je veux faire c'est restituer ces champs id avec un ordre précis : je m'explique je veux les données commencant par G puis par C puis par E puis par D. Pour l'exemple que j'ai donné le résultat devrait être le suivant:
G16547
G1986
C10006
E456
D1648
J'arrive à obtenir le résultat avec cette requête:
select * from matable where id like 'G%' 
UNION ALL 
select * from matable where id like 'C%' 
UNION ALL 
select * from matable where id like 'E%' 
UNION ALL 
select * from matable where id like 'D%'

Cependant je voudrais bien voir s'il n'y a pas moyen de simplifier cette requête.
Merci d'avance pour votre aide
Lire la suite 

[SQL] Optimisation de requête »

14 réponses
Réponse
+1
moins plus
salut,
je ne sais si ça va marcher mais essayes comment,
qaund tu fait ta requète à la fin tu rajoute:
.......
.......
Order by id (tu met l'ordre que tu veux faire)

je pense que ça peut marcher
malaik5- 28 févr. 2011 à 11:32
j'ai pas de SGBD installé sur mon ordi là, je te donne des indices que tu teste et dsl de ne pas les tester avant, essayes ça:

SELECT *
FROM 'ma_table'
ORDER BY FIELD (id, 'G%', 'C%', 'E%', 'D%')

et pour rappel:
Les paramètres passés à la fonction FIELD() sont : le nom du champ de type chaîne de caractère sur lequel effectuer le tri, puis les occurences de cette chaîne dans l'ordre de tri souhaité.
saad0n87 - 28 févr. 2011 à 16:46
C'est parfait ca marche bien
Merci beaucoup
Pour ceux que ca interesse et qui travaillent sur Oracle l'équivalent est order by case when
malaik5- 28 févr. 2011 à 17:52
mais de rien
c'est avec amour du dev qu'on fait ça
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,
Alors je sais pas si ce que je vais te dire est correcte, mais a première vue je pensais à ca :
select * from matable where id like 'G%' OR id like 'C%' OR id like 'E%' OR id like 'D%'
saad0n87 - 25 févr. 2011 à 10:25
Non ça ne marche pas j'ai déjà testé. Ca fait ressortir les données dans l'ordre où elles apparaissent dans la table.
Merci quand même
Oz'- 25 févr. 2011 à 10:31
Tu ne veux afficher que les id qui commence par G, C, E et D ?
saad0n87 - 25 févr. 2011 à 10:34
En fait tous les id commencent comme ça
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour

Je suppose que tu as rentré a la main dans une table tes G C E D si oui il te suffit de mettre 1 espace dvt G puis 2 espace dvt C puis 3 espaces dvt E ....

Quand tu fera ton order by le 1 er champ sera celui avec 1 espace puis le second avec 2 ....
saad0n87 - 28 févr. 2011 à 16:46
en fait non je n'ai pas la main sur les tables
Ajouter un commentaire
Ce document intitulé « [SQL] Optimisation de requête » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?