[SQL] Optimisation de SELECT

A) Soit une table
ID CODE_LNG TEXT
1 * Blabla*
1 FRA BlablaFRA
1 ESP BlablaESP
2 * Blabla*
2 ESP BlablaESP

=> Je veut charger pour un id donné (ou des id donnés) :

  • Le code langue demandé (FRA, *, etc…)
  • Si pas présent, le code langue *
    Je ne veut pas que ca renvoie 2 enreg pour 1 id. En sortie il faut un record par id, à la rigueur, n record, mais avec le bon record en premier (pour un id donné)

J’espére que c(est clair, la question etant : comment faire ca en une seule requete sql ?

Pour quelle base?

comment ça t’es pire que moi?

Sinon :

[cpp]SELECT lang, text, CASE lang WHEN ‘X’ THEN 1 ELSE 0 END AS sortkey
FROM table
WHERE ID = z AND (lang = ‘X’ OR lang = ‘*’)
ORDER BY sortkey DESC
LIMIT 1[/cpp]

GRRRR!! Convaincu?

Ce n’est pas suffisant comme ça :
[cpp]SELECT lang, text
FROM table
WHERE ID = z
AND lang in (‘X’, ‘*’)
ORDER BY lang DESC
LIMIT 1[/cpp]
A priori, Si X est présent, il passera avant *, non?

Vi c’est sûr :slight_smile: mais moi je force les choses et de toute façon c’est pas mon problème :stuck_out_tongue: