2010-10-20 5 views
0

Я использую параметризованные запросы с PHP У меня есть следующие два запроса:Предложения необходимо для оптимизации запроса MySQL

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

и

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 

Короче говоря, вопросы обсуждаются в Таблица «posts» и на них ссылается их question_id.

У меня есть некоторый избыточный код в моем PHP-коде, потому что я не знаю достаточно mysql для запроса базы данных один раз, чтобы получить результаты, которые мне нужны из этих двух запросов.

Является ли это тем, что делаю это нормально и занимаюсь избыточными частями своего PHP-кода или есть лучший способ сделать это?

+0

Если я правильно понимаю ваш вопрос, вы хотите один запрос, который закачает вопрос и это связанные посты? AFAIK это невозможно, не могли бы вы предоставить свой php-код? – thomaux

ответ

2

использование присоединиться вместо сопоставления столбцов, где положение

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

И

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 вопроса в полном порядке, объединение результатов из нескольких таблиц - не очень чистая идея.

Вам просто нужно проверить, есть ли у вас все объединенные индексы во всех полях, которые вы используете в ГДЕ, и это будет очень быстро.

+1

Вы можете префикс вашего запроса с помощью 'EXPLAIN', чтобы получить информацию о том, как mysql запускает запрос, что укажет на то, что вы можете оптимизировать с помощью индексов. Очевидно, не делайте этого в своем скрипте: просто выполните запрос на объяснение на db. –

Смежные вопросы