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

 


 Mot :   Pseudo :  
 
 Page :   1  2  3
Page Suivante
Auteur Sujet :

[PHP/mySQL] conseils d'optimisation

n°1252961
cinocks
Posté le 25-11-2005 à 10:11:14  profilanswer
 

Reprise du message précédent :
que fais ta boucles? a quoi servent les requetes dedans?


---------------
MZP est de retour
mood
Publicité
Posté le 25-11-2005 à 10:11:14  profilanswer
 

n°1252967
mrbebert
Posté le 25-11-2005 à 10:14:14  profilanswer
 

Multinickname a écrit :

http://forum-images.hardware.fr/th [...] eflag1.gif  [:dawa]
 
Ce topic va m'intéresser, parce que je fais un forum, mais dès qu'on est à plusieurs online qu'est ce qu'il rame [:pingouino]
Et ca vient pas du server...
 
J'ai une petite question, j'ai une requete dans une boucle, cay mal non? :/
Mais je ne peux pas faire autrement... dans ce cas là je dois faire quoi? revoir la structure de mes tables? ou alors il n'y a pas une technique avec des jointures mysql ou autre? je ne sais pas vraiment l'utiliser...

Généralement, oui, c'est l'incarnation même du mal absolu :D  
Il vaut mieux avoir 1 requête qui renvoie 10 lignes que 10 requêtes renvoyant chacune une ligne. Bon, ca reste une tendance générale, chaque cas est particulier [:proy]  
 
Tu récupères quelles informations dans cette boucle ?
Souvent, ca peut être remplacé par un LEFT JOIN.

Message cité 1 fois
Message édité par mrbebert le 25-11-2005 à 10:15:32
n°1252997
Multinickn​ame
Ah bon...
Posté le 25-11-2005 à 10:36:53  profilanswer
 

cinocks a écrit :

que fais ta boucles? a quoi servent les requetes dedans?


 
 
J'ai une requete qui récupère les posts de la page du topic, puis a l'intérieur de la boucle qui liste les posts j'ai une requete qui va chercher des infos sur l'utilisateur qui a posté (signature, avatar, etc...)
 
en précisant bien dans ma requete vers la table users uniquement les champs dont j'ai besoin...  
 
est ce gênant?


---------------
Feaks Forum
n°1253000
Multinickn​ame
Ah bon...
Posté le 25-11-2005 à 10:40:13  profilanswer
 

mrbebert a écrit :

Généralement, oui, c'est l'incarnation même du mal absolu :D  
Il vaut mieux avoir 1 requête qui renvoie 10 lignes que 10 requêtes renvoyant chacune une ligne. Bon, ca reste une tendance générale, chaque cas est particulier [:proy]  
 
Tu récupères quelles informations dans cette boucle ?
Souvent, ca peut être remplacé par un LEFT JOIN.


 
Ok ! :jap:
 
Disons que je saurais faire une requete avec une jointure...
 
Mais ensuite c'est au moment de récupérer les infos...
 
dans l'array que ca va me créer avec mysql_fetch_assoc(), je fais comment pour savoir si telle info est dans la table user ou la table post? :??:


---------------
Feaks Forum
n°1253003
mrbebert
Posté le 25-11-2005 à 10:41:18  profilanswer
 

Tu peux essayer de tout faire en une seule requête.
Quelque chose de ce genre :
 
SELECT tb_post.date, tb_post.text, tb_users.name
FROM tb_post
 
LEFT JOIN tb_users ON tb_post.iduser = tb_users.id
 
WHERE tb_post.idtopic = 123
 
ORDER BY tb_post.date DESC
LIMIT 0,20;
 
Pour chaque post, il va chercher le user correspondant
 
Tu peux renommer les colonnes comme tu veux :
SELECT tb_post.date AS date_du_post, tb_post.text AS texte_du_post, tb_users.name AS nom_posteur
...

Message cité 1 fois
Message édité par mrbebert le 25-11-2005 à 10:45:49
n°1253007
Multinickn​ame
Ah bon...
Posté le 25-11-2005 à 10:46:21  profilanswer
 

mrbebert a écrit :

Tu peux essayer de tout faire en une seule requête.
Quelque chose de ce genre :
 
SELECT tb_post.date, tb_post.text, tb_users.name
FROM tb_post
 
LEFT JOIN tb_users ON tb_post.iduser = tb_users.id
 
WHERE tb_post.idtopic = 123
 
ORDER BY tb_post.date ASC
LIMIT 0,20;
 
Pour chaque post, il va chercher le user correspondant
 
Tu peux renommer les colonnes comme tu veux :
SELECT tb_post.date AS date_du_post, tb_post.text AS texte_du_post, tb_users.name AS nom_posteur
...


 
 
Ok ! Merci beaucoup :bounce: J'avais essayé de faire le mieux possible pour ne pas mettre de requetes dans des boucles mais cette technique me paraît nickel :)
 
EDIT : mais sans renommer les colonnes, il est possible d'avoir une variable sous cette forme :  
 

Code :
  1. $pwet['tb_post.date']


 
?

Message cité 1 fois
Message édité par Multinickname le 25-11-2005 à 10:49:13

---------------
Feaks Forum
n°1253018
mrbebert
Posté le 25-11-2005 à 10:52:39  profilanswer
 

Dans ce cas, je pense que la colonne s'appellera "date" seulement [:figti]  
 
C'est pratique de pouvoir les renommer quand tu veux récupérer 2 colonnes (provenant de 2 tables différentes) ayant le même nom :)

n°1253022
cinocks
Posté le 25-11-2005 à 10:54:12  profilanswer
 

Multinickname a écrit :

J'ai une requete qui récupère les posts de la page du topic, puis a l'intérieur de la boucle qui liste les posts j'ai une requete qui va chercher des infos sur l'utilisateur qui a posté (signature, avatar, etc...)
 
en précisant bien dans ma requete vers la table users uniquement les champs dont j'ai besoin...  
 
est ce gênant?


 
Tres genant. Tu vas faire en moyenne 26 requetes rien que pour afficher le contenu des messages. Une requete suffit.
 
Puisque dans la table des messages tu as l'identifiant de l'utilisateur, pourquoi ne pas faire de suite une jointure sur la table des utilisateurs pour en recuperer les champs interessants.
 

Code :
  1. SELECT m.tousleschamps que tu veux, u.tousleschampsquetuveux
  2. FROM message m INNER JOIN utilisateur u ON (u.id_utilisateur = m.id_utilisateur)
  3. WHERE m.id_sujet = $tavariablesujet
  4. AND m.id_page = $tavariablepage


---------------
MZP est de retour
n°1253025
cinocks
Posté le 25-11-2005 à 10:55:37  profilanswer
 

Multinickname a écrit :

Ok ! Merci beaucoup :bounce: J'avais essayé de faire le mieux possible pour ne pas mettre de requetes dans des boucles mais cette technique me paraît nickel :)
 
EDIT : mais sans renommer les colonnes, il est possible d'avoir une variable sous cette forme :  
 

Code :
  1. $pwet['tb_post.date']


 
?


 
tu peux mettre des alias sur les champs
 

Code :
  1. SELECT toto AS CHAMPS1, titi AS CHAMPS2


---------------
MZP est de retour
n°1253035
Multinickn​ame
Ah bon...
Posté le 25-11-2005 à 11:04:11  profilanswer
 

Ok merci, j'ai compris tout cela, ça fonctionne presque :jap:
 
Dans la requête je veux récupérer plusieurs champs de la table users, je ne vois pas trop ou le mettre dans cette requete...
 
(Après cette réponse, si jamais vous avez un lien qui puisse m'expliquer un peu les jointures mysql, c'est pas de refus :jap: ou tout ce qui mysql en général même (sauf developpez.com, c'était pas très clair à mon goût))
 
:jap:


---------------
Feaks Forum
mood
Publicité
Posté le 25-11-2005 à 11:04:11  profilanswer
 

n°1253037
cinocks
Posté le 25-11-2005 à 11:08:02  profilanswer
 

Ce n'est pas du MySQL, mais du SQL.
 
pour recuperer plusieurs champs d'une table c'est simple.
 
SELECT matable.champs1, matable.champs2, ...


---------------
MZP est de retour
n°1253048
Multinickn​ame
Ah bon...
Posté le 25-11-2005 à 11:15:35  profilanswer
 

cinocks a écrit :

Ce n'est pas du MySQL, mais du SQL.
 
pour recuperer plusieurs champs d'une table c'est simple.
 
SELECT matable.champs1, matable.champs2, ...


 
 
Bien entendu ça je sais faire, mais dans ce type de requete :  
 

Code :
  1. $sql_posts = 'SELECT posts.id AS post_id,posts.*
  2.                          FROM posts LEFT JOIN users ON posts.id_author = users.id
  3.                          WHERE posts.topic_id='.$_GET['showtopic'].' ORDER BY id LIMIT '.$pma_m.', '.$mpp;


 
j'ai essayé comme ça mais ca ne fonctionne pas :  
 

Code :
  1. $sql_posts = 'SELECT posts.id AS post_id,posts.*, users.*
  2.                          FROM posts,users LEFT JOIN users ON posts.id_author = users.id
  3.                          WHERE posts.topic_id='.$_GET['showtopic'].' ORDER BY id LIMIT '.$pma_m.', '.$mpp;


---------------
Feaks Forum
n°1253051
cinocks
Posté le 25-11-2005 à 11:19:53  profilanswer
 

Alors tu oublis de suite le *, y'a rien de pire. Il faut toujours mettre les champs que tu veux recuperer. D'une part, ca te permet de limiter la selection. D'autre part, ca permet à l'ordonnanceur d'executer la requete dans les meilleures conditions.


---------------
MZP est de retour
n°1253056
Multinickn​ame
Ah bon...
Posté le 25-11-2005 à 11:22:50  profilanswer
 

cinocks a écrit :

Alors tu oublis de suite le *, y'a rien de pire. Il faut toujours mettre les champs que tu veux recuperer. D'une part, ca te permet de limiter la selection. D'autre part, ca permet à l'ordonnanceur d'executer la requete dans les meilleures conditions.


 
Pour ma table posts je n'utilise pas le * même si j'ai besoin de tous les champs de la table?
 
Pour la table users, c'était pour aller plus vite dans le quote
 
Sinon, pour récupérer plusieurs champs de la table users?  [:cupra]


Message édité par Multinickname le 25-11-2005 à 11:24:09

---------------
Feaks Forum
n°1253061
cinocks
Posté le 25-11-2005 à 11:27:16  profilanswer
 

Ce n'est pas genial pour l'ordonnanceur de requete. Et rien ne te dit que par la suite tu n'auras pas de nouveaux champs dont tu n'auras pas besoin ici.
 
C'est aussi une question de lisibilité. C'est au choix. Je prefere etre strict dans mon ecriture.


---------------
MZP est de retour
n°1253067
Multinickn​ame
Ah bon...
Posté le 25-11-2005 à 11:30:01  profilanswer
 

cinocks a écrit :

Ce n'est pas genial pour l'ordonnanceur de requete. Et rien ne te dit que par la suite tu n'auras pas de nouveaux champs dont tu n'auras pas besoin ici.
 
C'est aussi une question de lisibilité. C'est au choix. Je prefere etre strict dans mon ecriture.


 
C'est noté. ;)
 
Je vais mettre les champs dont j'ai besoin...
 
Mais euh bon je vais arrêter de pourrir ce topic avec mes questions :d
 
Je vais essayer de chercher pour trouver comment choisir les champs de ma table users...
 
EDIT : j'ai trouvé ;)


Message édité par Multinickname le 25-11-2005 à 11:56:25

---------------
Feaks Forum
n°1253160
Berceker U​nited
PSN : berceker_united
Posté le 25-11-2005 à 13:07:45  profilanswer
 
n°1253748
nero27
Posté le 26-11-2005 à 15:36:46  profilanswer
 

MAJ : Ajout de quelques liens ;)

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
Modifier un fichier PDF avec PHPAide pour amelioration script PHP
[prog PHP][resolu] Faire un PHP qui archive un siteStructure base de données MySQL : correcte ou pas ?
[PHP] Utiliser un framework MVC ?[PHP] Récupérer l'url de la page cible protégée?
PHP dans Java Scriptphp et mysql
[Apache/PHP/MySQL] Newbie - Pb de connecxion distante (en local: OK) 
Plus de sujets relatifs à : [PHP/mySQL] conseils d'optimisation


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