[SQL] Optimisation de requête

Résolu
saad0n87 -  
malaik5 Messages postés 259 Date d'inscription   Statut Membre Dernière intervention   -
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

3 réponses

  1. malaik5 Messages postés 259 Date d'inscription   Statut Membre Dernière intervention   33
     
    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
    1. malaik5 Messages postés 259 Date d'inscription   Statut Membre Dernière intervention   33
       
      ou bien si tu ne veux pas les ordonner tu fait un Group BY
      0
    2. saad0n87
       
      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
    3. malaik5 Messages postés 259 Date d'inscription   Statut Membre Dernière intervention   33
       
      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
    4. saad0n87
       
      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
    5. malaik5 Messages postés 259 Date d'inscription   Statut Membre Dernière intervention   33
       
      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
  2. Melooo Messages postés 1476 Statut Membre 84
     
    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
    1. saad0n87
       
      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
    2. Oz' Messages postés 180 Statut Membre 63
       
      Tu ne veux afficher que les id qui commence par G, C, E et D ?
      0
    3. saad0n87
       
      En fait tous les id commencent comme ça
      0
  3. moiced59 Messages postés 1161 Statut Membre 60
     
    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
    1. saad0n87
       
      en fait non je n'ai pas la main sur les tables
      0