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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] aidez moi à rassembler mes requêtes

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MySQL] aidez moi à rassembler mes requêtes

n°924309
Big-Foot
Posté le 15-12-2004 à 18:28:19  profilanswer
 

Hello,
 
Je cherche à rendre l'execution d'un script php le plus rapide possible, et pour ça je voudrais rassembler mes requêtes.
 
Pour commencer je voudrais bien savoir comment il est possible de rassembler ces 2 là :
 

Code :
  1. "SELECT `cat_title`, `scat_id`, `scat_title`, `scat_urlname`, `scat_desc` FROM `" . TABLE_CATEGORIES . "`, `" . TABLE_CATEGORIES_SUB . "` WHERE " . TABLE_CATEGORIES . ".cat_id=" . TABLE_CATEGORIES_SUB . ".scat_cat ORDER BY `cat_order`, `scat_order` ASC";
  2. // après cette selection, intervient une boucle où il y a cette 2ème query
  3. "SELECT `post_time`, `post_poster`, `user_username` FROM `" . TABLE_POSTS . "`, `" . TABLE_USERS . "` WHERE " . TABLE_POSTS . ".post_scat='$tab[1]' AND " . TABLE_USERS . ".user_id=" . TABLE_POSTS . ".post_poster ORDER BY `post_time` DESC LIMIT 1";
  4. // le $tab[1] est en fait la valeur de scat_id de la 1ère selection


(excusez la syntaxe, il y a des constantes php)
 
On fait, je voudrais sortir ma 2ème query de la boucle et faire une seule query pour tout, mais je n'y arrive pas (j'ai notamment des problèmes avec $tab[1]). Je me suis penché sur les JOIN mais je ne sais pas si c'est la solution.
 
merci pour votre aide :)
 
merci
 
edit: ortho


Message édité par Big-Foot le 15-12-2004 à 22:17:32
mood
Publicité
Posté le 15-12-2004 à 18:28:19  profilanswer
 

n°928190
Big-Foot
Posté le 20-12-2004 à 15:48:04  profilanswer
 

alors, c'est possible de rassembler ces 2 requêtes ? Parce que toutes mes tentatives ont échoués.

n°929394
APLC
Corporation & Company Ltd
Posté le 21-12-2004 à 17:50:21  profilanswer
 

il me semble avoir déja rencontré ce cas, et je m'en étais sorti en "dénormalisant" la base:
tu pourrait ajouter, par exemple, deux champs dans la TABLE_CATEGORIES_SUB qui s'intituleraient scat_last_poster et scat_last_time (ces champs seraient mis à jour lors de chaque insertion)... et ainsi, pas besoin de boucle...

n°929557
sircam
I Like Trains
Posté le 21-12-2004 à 22:09:52  profilanswer
 

Qu'est-ce qui t'empêche de faire une mega jointure monstrueuse entre toutes les tables concernées ?
 
-> La jointure se fait soit avec une clause JOIN appropriée, ou plus classiquement avec FROM et la jointure WHERE idoine.
 
Au pire, tu peux limiter à 2 queries, en passant en paramètre du 2è toutes les valeurs récoltées dans le premier query.
 
-> Clause post_scat IN si permise par le dbms ou, à défaut, WHERE post_scat = v1 AND post_scat = v2 AND ...
 


:love: On doit être les seuls à faire ça.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°930996
Big-Foot
Posté le 23-12-2004 à 15:26:13  profilanswer
 

APLC a écrit :

il me semble avoir déja rencontré ce cas, et je m'en étais sorti en "dénormalisant" la base:
tu pourrait ajouter, par exemple, deux champs dans la TABLE_CATEGORIES_SUB qui s'intituleraient scat_last_poster et scat_last_time (ces champs seraient mis à jour lors de chaque insertion)... et ainsi, pas besoin de boucle...


C'est justement ce que je cherchais à éviter, je préfère avoir les informations de mes tables qui ne se répètent jamais.
 

sircam a écrit :

Qu'est-ce qui t'empêche de faire une mega jointure monstrueuse entre toutes les tables concernées ?
 
-> La jointure se fait soit avec une clause JOIN appropriée, ou plus classiquement avec FROM et la jointure WHERE idoine.


Ce qui m'empèche de faire une jointure, c'est que je sais pas comment faire :(
J'ai fouillé les manuels mais je comprends pas à 100% le fonctionnement...
Dans mon cas, sur quoi s'appliquerait le JOIN ?
Quel est la différence entre un LEFT et un RIGHT JOIN ?


Message édité par Big-Foot le 23-12-2004 à 15:26:54
n°931002
sircam
I Like Trains
Posté le 23-12-2004 à 15:43:00  profilanswer
 

Big-Foot a écrit :

Ce qui m'empèche de faire une jointure, c'est que je sais pas comment faire :(
J'ai fouillé les manuels mais je comprends pas à 100% le fonctionnement...
Dans mon cas, sur quoi s'appliquerait le JOIN ?
Quel est la différence entre un LEFT et un RIGHT JOIN ?


Ha, c'est donc là que ça coince  :p  
 
File un peu ton schéma, qu'on y voit plus clair.
 
Tu as fait une belle jointure toute propre dans ton premier query, non ? Tu peux le faire avec 3 tables, c'est idem.

n°931004
Big-Foot
Posté le 23-12-2004 à 15:47:30  profilanswer
 

tu veux le shéma des tables c'est ça ?
 
Ouai j'ai fait une jointure mais pas avec un JOIN.

n°931009
Big-Foot
Posté le 23-12-2004 à 15:55:43  profilanswer
 

Je sais pas si c'est ce que tu voulais mais voilà mes tables [pdf].
 
J'avais bien essayé une jointure avec 3 tables comme tu dis, mais il me semble que j'avais un gros problème avec la condition (WHERE).

n°931267
sircam
I Like Trains
Posté le 23-12-2004 à 22:08:23  profilanswer
 

Tu cherches sans doute trop loin; sauf erreur de ma part, ça peut se faire tout connement.
 
- Les noms de tes tables dans ton schéma ne correspondent pas à ceux de ton query, il y a une raison ?
- Les clefs étrangères ne sont pas renseignées : je dois deviner ?  :o  
- D'après le contexte, je crois deviner que df_categorie_sub et df_posts présentent une relation 1-n et que df_posts.post_scat est foreign key vers df_categorie_sub, mais les types ne correspondent pas : mediumint(8) et mediumint(5).
 
Tu as montré que tu savais faire une jointure. Lance-toi, fais-nous, en SQL, une mega-jointure entre tes quatres tables. Tu dois forcément les retrouver toutes les 4 dans la clause FROM. Les jointures se font entre deux champs de chaque table dans la clause WHERE. Donc, 3 jointures à faire.
 
Ne te tracasses pas pour df_posts qui sert de liaison entre df_categories_sub et df_users - si ma boule de crystal m'a bien renseigné, car c'est pas dans ton schéma. Fais les jointures avec chaque table tranquilement.  [:crusty128]
 
A toi de jouer... Ici on ne donne pas des solutions toutes faites, on fais réfléchir et on laisse mariner.
 
Par pur sadisme, c'est évident.  [:aline2003]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}

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

  [MySQL] aidez moi à rassembler mes requêtes

 

Sujets relatifs
accéder à une base mysql avec php5 RESOLUproblème requete multiple dans Mysql
Pb d'optimisation php/mysqlRequêtes sous access
Création requêtes sous Access et VBArequette sql (mysql) [RESOLU]
Problème d'insert d'une image dans une base MysqlPhp/mysql Afficher ID
Décaler les valeurs dans une base mySQLAIDEZ MOI !!!
Plus de sujets relatifs à : [MySQL] aidez moi à rassembler mes requêtes


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