mysql / php: показать сообщения и для каждого сообщения все комментарии

Я знаю, что этот вопрос задавался несколько раз (однако я все еще не мог найти решение):

  • PHP MYSQL с сообщениями с комментариями
  • mysql query – сообщения в блогах и комментарии с ограничением
  • Структура mysql для сообщений и комментариев …

Основной вопрос: наличие таблиц сообщений , комментариев , пользователь … можете ли вы с одним синтаксисом выбрать и показать все сообщения и все комментарии (с комментарием comment.text, comment.timestamp)? Как бы выглядел такой выбор? Если нет, то какое самое простое решение?

Я также попытался JOIN к таблице comments таблицей posts и использовать GROUP BY , но я получил либо только один комментарий в каждой строке, либо каждый комментарий, но также и эти сообщения несколько раз !?

Я попробовал решение первой ссылки (вложенную mysql_query, а затем выборку), а также вторую ссылку (с массивами). Однако первый из них вызвал множество ошибок (синтаксис в этом сообщении кажется неправильным, и я не мог понять, как его решить), а во втором у меня были проблемы с массивами.

Мой запрос выглядит так:

 SELECT p.id, p.title, p.text, u.username, c.country_name, (SELECT SUM(vote_type) FROM votes v WHERE v.post_id = p.id) AS sum_vote_type FROM posts p LEFT JOIN user u ON ( p.user_id = u.id ) LEFT JOIN countries c ON ( c.country_id = u.country_id ) ORDER BY $orderby DESC 

Мне было интересно, не слишком ли распространен этот вопрос, когда есть сообщения и комментарии, чтобы показать …?

Спасибо за любую помощь заранее!

Не зная структуру базы данных, она должна выглядеть примерно так. Обратите внимание, что вы должны заменить символы * более явным списком столбцов, которые вам действительно нужны.

 SELECT p.*, c.*, u.* FROM posts p LEFT JOIN comments c ON c.post_id = p.id LEFT JOIN users u ON u.id = p.author_id 

Обратите внимание, что если вы просто пытаетесь получить подсчеты, суммы и тому подобное, рекомендуется кэшировать часть этой информации. Например, вы можете захотеть кэшировать счетчик комментариев в таблице сообщений, а не подсчитывать их каждый запрос. Учитывайте и обновляйте счетчик комментариев при добавлении / удалении комментария.

EDIT: осознал, что вы также хотели прикрепить данные пользователя к каждому комментарию. Вы можете ПРИСОЕДИНИТЬСЯ к одному и тому же столу несколько раз, но он становится уродливым. Это может стать очень дорогостоящим запросом. Я также включаю пример того, как столбцы псевдонимов, чтобы он был менее запутанным:

 SELECT p.*, c.*, u.name as post_author, u2.name as comment_author FROM posts p LEFT JOIN comments c ON c.post_id = p.id LEFT JOIN users u ON u.id = p.author_id LEFT JOIN users u2 ON u2.id = c.author_id