2010-10-20 8 views
0

J'utilise des requêtes paramétrées avec PHP j'ai les deux requêtes suivantes:Suggestion nécessaire pour optimiser une requête MySQL

SELECT username,question_text 
FROM questions,users 
WHERE questions.question_id = 4 AND questions.user_id = users.user_id 

et

SELECT username, post_text 
FROM posts,users WHERE posts.question_id = 4 
AND posts.user_id = users.user_id ORDER BY posts.post_id ASC 

En bref, les questions sont en cours de discussion dans le "posts" table et sont référencés par leur question_id. J'ai un code redondant dans mon code PHP parce que je ne connais pas assez mysql pour interroger la base de données une fois pour obtenir les résultats dont j'ai besoin sur ces deux requêtes.

Est-ce que la façon dont je vais le faire est bien et traiter les parties redondantes de mon code PHP ou existe-t-il un meilleur moyen d'y parvenir?

+0

Si je comprends bien votre question, vous voulez une requête qui récupérera une question et il est les commentaires? AFAIK que ce n'est pas possible, pourriez-vous fournir votre code php? – thomaux

Répondre

2

au lieu de rejoindre l'utilisation des colonnes correspondant à la clause où

SELECT username,question_text 
FROM questions INNER JOIN users on questions.user_id = users.user_id 
WHERE questions.question_id = 4 

Et

SELECT username, post_text 
FROM posts INNER JOIN users on posts.user_id = users.user_id 
WHERE posts.question_id = 4 
ORDER BY posts.post_id ASC 
1

2 requêtes est totalement bien là, combinant la sortie de plusieurs tables n'est pas idée très propre.

Vous avez juste besoin de vérifier si vous avez tous les index combinés sur tous les champs que vous utilisez dans WHERE, et ce sera très rapide.

+1

Vous pouvez préfixer votre requête avec 'EXPLAIN' pour obtenir des informations sur la façon dont mysql exécute la requête, ce qui indiquera ce que vous pouvez optimiser avec des index. Évidemment, ne le faites pas dans votre script: exécutez directement la requête explain sur la base de données. –

Questions connexes