Структура таблицы из comments
:
id | user_id | cmt_id | slug
1 | 565 | 5 | home
2 | 324 | 6 | home
3 | 71 | 7 | home
4 | 408 | 1 | about
Структура таблицы из cmt_likes
:
id | user_id | cmt_id | slug
1 | 324 | 6 | home
2 | 324 | 6 | home
3 | 324 | 6 | home
4 | 71 | 7 | home
5 | 71 | 7 | home
Как видно на таблице cmt_likes
, на home
страница комментария от пользователя 324
имеет 3 лайка, а комментарий от пользователя 71
имеет 2 лайка (я использую количество строк с одинаковыми cmt_id
и slug
для подсчета лайков).
Это мой текущий sql, это только для отображения комментариев:
SELECT
`comments`.`user_id`, `comments`.`cmt`, `comments`.`cmt_id`, `comments`.`slug`, `users`.`username`
FROM `comments`
INNER JOIN `users`
ON `comments`.`user_id` = `users`.`user_id`
WHERE `comments`.`slug` = :slug
ORDER BY `comments`.`id` DESC
Но я хочу ORDER BY
количество лайков.
, поэтому япопробовал:
SELECT
`comments`.`user_id`, `comments`.`cmt`, `comments`.`cmt_id`, `comments`.`slug`, `cmt_likes`.`cmt_id`, `users`.`username`
FROM `comments`
INNER JOIN `users`
ON `comments`.`user_id` = `users`.`user_id`
INNER JOIN `cmt_likes`
ON `comments`.`cmt_id` = `cmt_likes`.`cmt_id`
WHERE `comments`.`slug` = :slug
GROUP BY `cmt_likes`.`cmt_id`
ORDER BY `cmt_likes`.`cmt_id` DESC
Но этот sql возвращает только те строки, которые имеют «лайки».Если вы посмотрите на мои таблицы, вы увидите, что у комментария от пользователя 565
нет лайков, поэтому эта строка не возвращается в приведенном выше sql.
Это мой текущий результат с вышеуказанным sql:
324
71
И это то, что я ожидал:
324
71
565