Я пытаюсь получить последние 1 или 2 комментария, связанные с каждым загружаемым пост, немного похожим на instagram, поскольку они показывают последние 3 комментария для каждого сообщения. До сих пор я получаю сообщения и количество просмотров.
Теперь все, что мне нужно сделать, это выяснить, как получить последние комментарии, не слишком уверенно, как подойти к нему, и именно поэтому я надеюсь, что кто-то с гораздо большим опытом поможет мне!
Это мой текущий запрос:
(SELECT
P.uuid,
P.caption,
P.imageHeight,
P.path,
P.date,
U.id,
U.fullname,
U.coverImage,
U.bio,
U.username,
U.profileImage,
coalesce(Activity.LikeCNT,0),
Activity.CurrentUserLiked
FROM USERS AS U
INNER JOIN Posts AS P
ON P.id = U.id
LEFT JOIN (SELECT COUNT(DISTINCT Activity.uuidPost) LikeCNT, Activity.uuidPost, Activity.id, sum(CASE WHEN Activity.id = $id then 1 else 0 end) as CurrentUserLiked
FROM Activity Activity
WHERE type = 'like'
GROUP BY Activity.uuidPost) Activity
ON Activity.uuidPost = P.uuid
AND Activity.id = U.id
WHERE U.id = $id)
UNION
(SELECT
P.uuid,
P.caption,
P.imageHeight,
P.path,
P.date,
U.id,
U.fullname,
U.coverImage,
U.bio,
U.username,
U.profileImage,
coalesce(Activity.LikeCNT,0),
Activity.CurrentUserLiked
FROM Activity AS A
INNER JOIN USERS AS U
ON A.IdOtherUser=U.id
INNER JOIN Posts AS P
ON P.id = U.id
LEFT JOIN (SELECT COUNT(DISTINCT Activity.uuidPost) LikeCNT, Activity.uuidPost, Activity.id, sum(CASE WHEN Activity.id = $id then 1 else 0 end) as CurrentUserLiked
FROM Activity Activity
WHERE type = 'like'
GROUP BY Activity.uuidPost) Activity
ON Activity.uuidPost = P.uuid
AND Activity.id = U.id
WHERE A.id = $id)
ORDER BY date DESC
LIMIT 0, 5
В основном комментарии хранятся в той же таблице, что и понравилось.
Итак, таблица Activity
, тогда у меня есть столбец comment
, который сохраняет текст комментария, а затем "type" равен "comment".
Возможно, это не очень хорошо объяснено, но я готов попробовать и дать как можно больше деталей!
Если кто-то может помочь ему очень ценится!!
UPDATE
По этому запросу, заданному https://stackoverflow.com/users/1016435/xqbert, я получаю эту ошибку:
Недопустимое сочетание сортировок (utf8_general_ci, IMPLICIT) и (utf8_unicode_ci, IMPLICIT) для операции '='
SELECT Posts.id,
Posts.uuid,
Posts.caption,
Posts.path,
Posts.date,
USERS.id,
USERS.username,
USERS.fullname,
USERS.profileImage,
coalesce(A.LikeCNT,0),
com.comment
FROM Posts
INNER JOIN USERS
ON Posts.id = 145
AND USERS.id = 145
LEFT JOIN (SELECT COUNT(A.uuidPost) LikeCNT, A.UUIDPost
FROM Activity A
WHERE type = 'like'
GROUP BY A.UUIDPOST) A
on A.UUIDPost=Posts.uuid
LEFT JOIN (SELECT comment, UUIDPOST, @row_num := IF(@prev_value=UUIDPOST,@row_num+1,1) as row_number,@prev_value := UUIDPOST
FROM Activity
CROSS JOIN (SELECT @row_num := 1) x
CROSS JOIN (SELECT @prev_value := '') y
WHERE type = 'comment'
ORDER BY UUIDPOST, date DESC) Com
ON Com.UUIIDPOSt = Posts.UUID
AND row_number <= 2
ORDER BY date DESC
LIMIT 0, 5
Последнее редактирование
Структуры таблиц:
Сообщения
----------------------------------------------------------
| id | int(11) | | not null |
| uuid | varchar(100) | utf8_unicode_ci | not null |
| imageLink | varchar(500) | utf8_unicode_ci | not null |
| date | timestamp | | not null |
----------------------------------------------------------
ПОЛЬЗОВАТЕЛЕЙ
-------------------------------------------------------------
| id | int(11) | | not null |
| username | varchar(100) | utf8_unicode_ci | not null |
| profileImage | varchar(500) | utf8_unicode_ci | not null |
| date | timestamp | | not null |
-------------------------------------------------------------
активность
----------------------------------------------------------
| id | int(11) | | not null |
| uuid | varchar(100) | utf8_unicode_ci | not null |
| uuidPost | varchar(100) | utf8_unicode_ci | not null |
| type | varchar(50) | utf8_unicode_ci | not null |
| commentText | varchar(500) | utf8_unicode_ci | not null |
| date | timestamp | | not null |
----------------------------------------------------------
Вот некоторые примеры, в таблице "Активность" в этом случае "тип" всегда будет равен "комментарий".
Суммируйте все и получите результат:
Когда я запрашиваю сообщения пользователей, я хотел бы иметь возможность зайти в таблицу "Активность" и получить последние 2 комментария за каждое сообщение, которое у него есть. Может быть, комментариев не будет, поэтому, очевидно, он вернет 0, может быть, может быть 100 комментариев для этого сообщения. Но я хочу только получить последние/последние 2 комментария.
В качестве примера можно привести пример использования Instagram. Для каждого сообщения отображаются последние комментарии 1, 2 или 3....
Надеюсь, это поможет!