Simplification de requete SQL [Résolu] - SQL/NoSQL - Programmation
Marsh Posté le 25-05-2012 à 11:56:55
Bonjour,
L'utilisation de like suppose un "%" dans la valeur et là je n'en vois pas.
Soit tu cherche la valeur exacte et tu mets = ou !=
soit c'est une valeur qui contient la partie d'une chaine et là il faut utiliser le %
Marsh Posté le 25-05-2012 à 12:00:46
tu peux faire une seule requete .
on va dire que c'est du mysql, un truc comme ça devrait fonctionner
ORDER BY
case
when LIBELLECENTREINTERET= 'Zoom sur...' then 2
when LIBELLECENTREINTERET= 'Revue de presse' then 1
else 0
END
DESC, ID_AGENT
Marsh Posté le 25-05-2012 à 13:29:34
L'ensemble des conditions des 3 requêtes peuvent être mises dans le même WHERE en utilisant des OR entre les conditions mais je suis pas sûr que pour les perfs, ça soit une bonne idée.
Code :
|
Si tu veux que des ID_AGENT uniques au final, tu enlèves REFCENTREINTERET.LIBELLECENTREINTERET du select et du group by...
Marsh Posté le 25-05-2012 à 14:49:00
rufo a écrit : L'ensemble des conditions des 3 requêtes peuvent être mises dans le même WHERE en utilisant des OR entre les conditions mais je suis pas sûr que pour les perfs, ça soit une bonne idée.
|
En fait, j’aimerais bien avoir au début de ma table tous les articles 'zoom sur' puis les autres et en dernier les 'revue de presse'.
Ta requête marche bien (sans le GROUP BY) mais n'ordonne pas par centre d’intérêt comme je veux, et je voudrais aussi avoir tous les articles.
Marsh Posté le 25-05-2012 à 14:58:15
Tu as essayé l'approche que je t'ai donnée ?
Marsh Posté le 25-05-2012 à 15:05:13
flo850 a écrit : Tu as essayé l'approche que je t'ai donnée ? |
Et bien, j'ai regardé et n'avais pas tout compris.
La je regarde un peu plus et ca a l'air d'etre bon!
Oups
Je code et confirmerais.
Je confirme.
Ca marche.
Merci
Marsh Posté le 25-05-2012 à 16:02:09
Ma solution de fait pas de tri. Rien ne t'empêches d'ajouter la solution de flo850 à la mienne
Marsh Posté le 25-05-2012 à 11:50:21
Bonjour,
J'ai réalisé une requête qui fonctionne bien, seulement elle est, à mon avis, hyper lourde. Je ne suis pas assez affuté pour réussir à simplifier mon code.
J'ai utilisé UNION pour assembler 3 requêtes semblables afin de faire "un tri" en plaçant "Zoom sur..." au début et "Revue de presse" à la fin.
SELECT DISTINCT
AGENT.ID_AGENT,
(...)
REFCENTREINTERET.LIBELLECENTREINTERET
FROM
AGENT
INNER(...)
WHERE
REFCENTREINTERET.LIBELLECENTREINTERET LIKE 'Zoom sur...'
UNION
SELECT DISTINCT
AGENT.ID_AGENT,
(...)
REFCENTREINTERET.LIBELLECENTREINTERET
FROM
AGENT
INNER(...)
WHERE
REFCENTREINTERET.LIBELLECENTREINTERET NOT LIKE 'Zoom sur...' AND
REFCENTREINTERET.LIBELLECENTREINTERET NOT LIKE 'Revue de presse'
UNION
SELECT DISTINCT
AGENT.ID_AGENT,
(...)
REFCENTREINTERET.LIBELLECENTREINTERET
FROM
AGENT
INNER(...)
WHERE
REFCENTREINTERET.LIBELLECENTREINTERET LIKE 'Revue de presse'
J'ai écourté avec (...)
Y a-t-il moyen de simplifier ce code?
D'avance merci.
Message édité par mmanu le 25-05-2012 à 15:24:26