Вы знаете, как в домашней ленте Facebook перечислены все последние сообщения? Он показывает пользователя, который опубликовал, их фактическое сообщение, а затем первые несколько комментариев, прикрепленных к этому сообщению. Это то, чего я пытаюсь достичь, но мне сложно создать единый запрос, который может собрать все эти данные.Получить первые несколько комментариев к сообщению из таблицы MySQL
У меня есть 3 стола: Использование, сообщения и комментарии. Каждый из них имеет уникальный идентификатор, но они ссылаются на идентификаторы друг друга. то есть в таблице комментариев есть столбцы для user_id пользователя, который опубликовал, и post_id сообщения, к которому он прикреплен.
В тот момент, когда я запрашиваю SQL, чтобы собрать все сообщения. Я присоединяюсь к своим пользователям и Комментарии таблицы, чтобы узнать имя пользователя плаката и в общей сложности, сколько комментариев пост имеет, например, так:
$query = "
SELECT `posts`.`id`,`posts`.`message`,`posts`.`link`,
`posts`.`posted`,`posts`.`category`,`posts`.`user_id`,
`users`.`username`,
count(`comments`.`id`)
FROM `posts`
INNER JOIN `users`
ON `posts`.`user_id`=`users`.`id`
JOIN `comments`
ON `comments`.`post_id`=`posts`.`id`
WHERE `posts`.`group_id` = '$id'
AND `posts`.`category`='$filter'
GROUP BY `posts`.`id`
ORDER BY `posts`.`posted`
DESC
";
Но вместо того, чтобы найти, как много комментариев пост имеет, я бы вместо того, чтобы как читать первые несколько сообщений. Может ли кто-нибудь подумать о способе достижения этого только одним запросом?
Спасибо за ответ. Я действительно использую mysqli. Кроме того, мой вопрос заключается не в том, как ограничить мои результаты, а на самом деле, как получить результаты. Если на моей странице будет 20 сообщений, я не хочу запускать 20 запросов, чтобы возвращать комментарии, я бы хотел получить все почтовые данные и первые 3 комментария в этом одном запросе. Я предполагаю, что это означало бы, что MySQL вернет массив INSIDE строки, если он сможет это сделать. – user1537360
Извините, я неправильно понял этот. Я обновлю свой ответ, но заметьте, что (а) запрос будет непроверенным и (б) он получит * все * комментарии для первых 20 сообщений, поэтому вам придется отсеять что-либо за пределами первых трех, используя фронт -end PHP-код. –
haha должен признать, что это сломало мой мозг некоторое время (я довольно новичок в MySQL). Думаю, я обнял его, хотя и сделал некоторые хитрости здесь и там, и он делает эту работу. Благодаря! – user1537360