Gride
Новичок
Выборка по нескольким таблицам
Всем привет!
При переделке и оптимизации форума возник такой вопрос:
В форуме есть таблицы members, topics и replies, соответственно для участников, тем и сообщений.
В форуме можно посмотреть профайл пользователя, где выводится дата регистрации, город, мыло, вебстраница и др. Все эти данные лежат, естественно, в таблице members и извлекаются оттуда запросом
SELECT * FROM members WHERE id = число.
Также в профайле выводится число тем, созданных этим пользователем и число его постов. Это можно получить с помощью запросов
SELECT COUNT(*) FROM topics WHERE author=число
SELECT COUNT(*) FROM replies WHERE author=число
где число - id пользователя из таблицы members
Можно ли все это сделать одним запросом, а не тремя?
Вроде как это можно сделать через LEFT JOIN, но прочитав мануал по MySQL я не понял синтаксис выборки одновременно по трем таблицам. Эксперименты в этой области успехом не увенчались.
Я поковырял разные форумы, так там в таблице members есть специальные поля, которые увеличиваются на 1 при создании тем и отправке постов, но зачем хранить данные, которые в любой момент можно подсчитать.
Вопрос не суть как актуален для профайла (один запрос или три), но подобный алгоритм понадобится и для создания списка всех участников форума. При выводе 20 записей на страницу два запроса в цикле - это уже 40 запросов.
Всем привет!
При переделке и оптимизации форума возник такой вопрос:
В форуме есть таблицы members, topics и replies, соответственно для участников, тем и сообщений.
В форуме можно посмотреть профайл пользователя, где выводится дата регистрации, город, мыло, вебстраница и др. Все эти данные лежат, естественно, в таблице members и извлекаются оттуда запросом
SELECT * FROM members WHERE id = число.
Также в профайле выводится число тем, созданных этим пользователем и число его постов. Это можно получить с помощью запросов
SELECT COUNT(*) FROM topics WHERE author=число
SELECT COUNT(*) FROM replies WHERE author=число
где число - id пользователя из таблицы members
Можно ли все это сделать одним запросом, а не тремя?
Вроде как это можно сделать через LEFT JOIN, но прочитав мануал по MySQL я не понял синтаксис выборки одновременно по трем таблицам. Эксперименты в этой области успехом не увенчались.
Я поковырял разные форумы, так там в таблице members есть специальные поля, которые увеличиваются на 1 при создании тем и отправке постов, но зачем хранить данные, которые в любой момент можно подсчитать.
Вопрос не суть как актуален для профайла (один запрос или три), но подобный алгоритм понадобится и для создания списка всех участников форума. При выводе 20 записей на страницу два запроса в цикле - это уже 40 запросов.