[SQL] Optimisation de requête

Résolu/Fermé
saad0n87 - Modifié par saad0n87 le 25/02/2011 à 10:11
malaik5 Messages postés 258 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 28 novembre 2013 - 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

A voir également:

3 réponses

malaik5 Messages postés 258 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 28 novembre 2013 33
25 févr. 2011 à 14:48
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
1
malaik5 Messages postés 258 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 28 novembre 2013 33
25 févr. 2011 à 14:49
ou bien si tu ne veux pas les ordonner tu fait un Group BY
0
La requete que j'ai mise marche ... le problème c'est que j'aurais bien aimé eviter de duppliquer la requete.
Je sais je suis un peu lourd ^^
0
malaik5 Messages postés 258 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 28 novembre 2013 33
25 févr. 2011 à 15:51
ehh bien essayes avec des 'AND'

select * from matable where id like 'G%' AND id like 'C%' ....

je ne sais pas si c'est ça que tu veux apres
0
Ca n'a pas de sens de mettre un AND il faudrait un OR mais ca ne marche pas . Je veux les id commencant par G puis ceux commencant par C puis E puis D
0
malaik5 Messages postés 258 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 28 novembre 2013 33
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é.
0
Melooo Messages postés 1405 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 18 mars 2013 84
25 févr. 2011 à 10:15
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%'
0
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
0
Oz' Messages postés 156 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 16 avril 2014 63
25 févr. 2011 à 10:31
Tu ne veux afficher que les id qui commence par G, C, E et D ?
0
En fait tous les id commencent comme ça
0
moiced59 Messages postés 1145 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 18 août 2014 60
26 févr. 2011 à 11:47
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 ....
0
en fait non je n'ai pas la main sur les tables
0