Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1366 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Résolu] Simplification de requete SQL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Simplification de requete SQL

n°2143644
mmanu
Posté le 25-05-2012 à 11:50:21  profilanswer
 

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
mood
Publicité
Posté le 25-05-2012 à 11:50:21  profilanswer
 

n°2143645
vave
Nice to meet me
Posté le 25-05-2012 à 11:56:55  profilanswer
 

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 %


---------------
Bel ours Vave, je me dois de l’admettre. -Skyl"win"-  Mais toi tu es intelligent -Homerde- - Ce génie -SkylWINd- JDD S16M72 10:43:46 GMT-DTC +1
n°2143646
flo850
moi je
Posté le 25-05-2012 à 12:00:46  profilanswer
 

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


---------------

n°2143653
rufo
Pas me confondre avec Lycos!
Posté le 25-05-2012 à 13:29:34  profilanswer
 

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 :
  1. SELECT AGENT.ID_AGENT, REFCENTREINTERET.LIBELLECENTREINTERET
  2. FROM AGENT INNER(...)
  3. WHERE
  4.    (REFCENTREINTERET.LIBELLECENTREINTERET LIKE 'Zoom sur...' ) OR
  5.    (REFCENTREINTERET.LIBELLECENTREINTERET NOT LIKE 'Zoom sur...' AND REFCENTREINTERET.LIBELLECENTREINTERET NOT LIKE 'Revue de presse') OR
  6.    (REFCENTREINTERET.LIBELLECENTREINTERET LIKE 'Revue de presse' )
  7. GROUP BY ID_AGENT, LIBELLECENTREINTERET


 
Si tu veux que des ID_AGENT uniques au final, tu enlèves REFCENTREINTERET.LIBELLECENTREINTERET du select et du group by...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2143665
mmanu
Posté le 25-05-2012 à 14:49:00  profilanswer
 

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.

Code :
  1. SELECT AGENT.ID_AGENT, REFCENTREINTERET.LIBELLECENTREINTERET
  2. FROM AGENT INNER(...)
  3. WHERE
  4.    (REFCENTREINTERET.LIBELLECENTREINTERET LIKE 'Zoom sur...' ) OR
  5.    (REFCENTREINTERET.LIBELLECENTREINTERET NOT LIKE 'Zoom sur...' AND REFCENTREINTERET.LIBELLECENTREINTERET NOT LIKE 'Revue de presse') OR
  6.    (REFCENTREINTERET.LIBELLECENTREINTERET LIKE 'Revue de presse' )
  7. GROUP BY ID_AGENT, LIBELLECENTREINTERET


 
Si tu veux que des ID_AGENT uniques au final, tu enlèves REFCENTREINTERET.LIBELLECENTREINTERET du select et du group by...


 
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.


Message édité par mmanu le 25-05-2012 à 14:56:25
n°2143668
flo850
moi je
Posté le 25-05-2012 à 14:58:15  profilanswer
 

Tu as essayé l'approche que je t'ai donnée ?

Message cité 1 fois
Message édité par flo850 le 25-05-2012 à 14:58:25

---------------

n°2143670
mmanu
Posté le 25-05-2012 à 15:05:13  profilanswer
 

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


Message édité par mmanu le 25-05-2012 à 15:12:30
n°2143693
rufo
Pas me confondre avec Lycos!
Posté le 25-05-2012 à 16:02:09  profilanswer
 

Ma solution de fait pas de tri. Rien ne t'empêches d'ajouter la solution de flo850 à la mienne ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Résolu] Simplification de requete SQL

 

Sujets relatifs
Requete SQL double résultatRequete insertion
Dans mon cas : SQL ou FTP ?Simplification de code
Appel aux dieux du SQL, à vos claviers ! ( optimisation requête... )Moteur de recherche en SQL server 2008
Problème requête HTTP[Resolu] Aide Requête
Plus de sujets relatifs à : [Résolu] Simplification de requete SQL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR