2014-02-14 2 views
1

Извините, если мой вопрос немного глупый. но я новичок в базе данных mysql. У меня есть две таблицы, например Post и comment. Я пытаюсь получить сообщение из таблицы Post и всех ее комментариев из таблицы Comment. что я пробовал до сих пор. "SELECT post.*,comment.username, comment.comment FROM post LEFT JOIN comment ON post.id = comment.post_id ORDER BY post.id DESC LIMIT 10";.Mysql left join return duplicate rows

Теперь проблема заключается в следующем: например. Если на пост 1 есть 5 комментариев, это приведет к чему-то вроде.

пост 1 -> 1 комментарий
пост 1 -> 2 комментария
сообщение 1-> Комментарий 3 и так далее.
Пока я пытаюсь получить что-то вроде

post1 -> комментарий 1 комментарий 2 комментария 3 ..

Я не хочу, чтобы сделать что-то для этой задачи в слое приложения.

+7

[ 'GROUP_CONCAT()'] (http://dev.mysql.com/doc/refman/5.0/ru/group-by-functions.html#function_group-concat)? – BlitZ

+1

Рассмотрите возможность обработки проблем отображения данных на уровне приложения, например. простой цикл PHP, действующий на упорядоченный массив. – Strawberry

+0

Спасибо всем за помощь .. –

ответ

1

Ваш результат корректен, потому что оператор JOIN объединяет две таблицы в одном наборе записей (потому что у вас много записей в таблице комментариев, относящихся только к одной записи в таблице сообщений).

Если вы хотите получить аль комментарии для одного поста вам нужно выполнить запрос посвящает получить все комментарии для этой темы, например:

SELECT * FROM comment WHERE post_id = YOUR_POST_ID LIMIT 10 

Приветствие

+0

спасибо. Поскольку я новичок в mysql. Я сделаю то, что вы предложили. и попытается понять GROUP_CONCAT(). Cheers –

+0

** GROUP_CONCAT ** - хорошая функция для конкатенации результатов, но я думаю, что вам нужно другое, см. Здесь, например: http://www.mysqlperformanceblog.com/2013/10/22/the-power-of- mysqls-GROUP_CONCAT / –