|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre habitué
![]() Inscription : décembre 2008 Messages : 207 ![]() |
Bonjour,
J'utilise la requête suivante : Code :
Je pourrais très bien passer le user_id manuellement, mais je trouve plus sémantiquement correct que ce soit la requête qui donne le user_id PS : est-ce que je peux mettre en cache la requête principale (dont le résultat va changer genre une ou deux fois par jour) sans que la sous-requête (somme) invalide le cache ?? |
||
|
|
00
|
|
|
#2 | ||
![]() ![]() |
Le problème avec USING et des jointures multiples et sans indentation, c'est qu'on ne sait pas au premier coup d'oeil quelles tables sont jointes !
Une analyse rapide de ta requête me laisse à penser que certaines jointures externes pourraient tout à fait être des jointures internes. Puisque campaign_has_site est probablement une table associative, les jointures de celle-ci avec les tables campaign et site gagneraient à être des jointures internes. Ce qui donnerait ce début de requête : Code :
Si la réponse est non, alors les autres jointures pourraient sans doute être aussi des jointures internes. Et si c'est le cas, alors la condition AND pub_format.pub_format_id IN... peut sans doute être aussi transformée en jointure interne, ce qui sera plus performant. Dis-nous-en un peu plus sur ce qu'est sensée retourner cette requête. Quant à ta question principale, je pense effectivement que l'imbrication des requêtes, en plus dans une formule de calcul, doit pas mal perturber le SGBD. Là encore, il vaudrait sans doute mieux faire une jointure entre user et la sous-requête. Mais ce ne sont que des pistes après une étude incomplète de la requête.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
00
|
|
|
#3 | ||
|
Membre habitué
![]() Inscription : décembre 2008 Messages : 207 ![]() |
Oui j'avoue qu'en règle générale je ne me soucis pas trop de interne/externe tant que la logique est correcte.
En respectant un peu plus le truc, ça fait : Code :
Obtenir la liste des pubs appartenant à au moins une campagne qui a sélectionnée le site SITE_ID et dont la consommation n'a pas atteint son maximum. Le nombre de crédit actuellement consommé est égal au champ campaign_consumed (absent sur le schéma qui n'est plus tellement à jour) + la somme de : [le nombre de ligne dans displayed divisé par le nombre d'affichage par crédit pour chaque type de pub] arrondi au supérieur J'aurais voulu enregistrer ce message pour le continuer plus tard, je le publie et j'éditerais au besoin |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com