#mysql
#mysql
Вопрос:
Мы пытаемся получить результаты из Table1, таблицы 2 и получить количество столбцов для каждого идентификатора результата в таблице 3,4.
Ниже приведены наши таблицы:
Table1 - Posts
----------------------------------
id | date | Tilte | AuthorID|
----------------------------------
321 | 2016-01 | test1 | 23234 |
423 | 2016-01 | test2 | 56752 |
324 | 2016-01 | test3 | 32433 |
546 | 2015-12 | test4 | 45354 |
Table2 - eg. Author Details (Get author's Name based on Table1.AuthorID)
---------------
id | Name |
------|-------|
23234 | test1 |
56752 | test2 |
32433 | test3 |
45354 | test4 |
Table3 - eg. likes (COUNT if logged in user likes this post based on post ID (Table1.id and userID = loggedinUserid))
-----------------------------
id | post_id | userID |
------| ------- |-----------|
32131 | 321 | 23234 |
42324 | 423 |. 56752 |
32423 | 324 | 32433 |
54623 | 546 | 45354 |
Table4 - eg. favorites (COUNT if user favorited this post based on post ID (Table1.id and userID = loggedinUserid))
--------------------------
id | post_id | userID |
------| --------|--------|
32133 | 321 | 23234 |
42334 | 423 | 56752 |
32423 | 324 | 32433 |
54687 | 546 | 45354 |
Я пробовал использовать UNION и JOIN, но получаю только результаты, которые существуют в таблицах избранного / лайков. Мне нужно 6 результатов (ОГРАНИЧЕНИЕ 6) из таблицы posts Table1 и проверить, понравился ли пользователь каждому / избранному.
Ожидаемый вывод JSON:
{
posts: [{
"postID": 321,
"postDate": "20/10/2020",
"postTitle": "Test",
"author": "Jack",
"userLiked": "yes",
"userFavorited": "no",
},
.....
]
}
Комментарии:
1. покажите нам ожидаемый результат и почему 6? Вам нужен список сообщений с их авторизацией, количеством лайков и избранных?
2. @JitendraYadav Это список сообщений с такими подробностями
3. @JitendraYadav Я отредактировал свой вопрос с ожидаемым результатом
4. Используйте
LEFT JOIN
для этого5. @Slava Rozhnev можете ли вы создать sql на основе этих таблиц? Я использовал left join, но он возвращает только результаты, которые существуют в избранных таблицах или лайках, а не во всех сообщениях
Ответ №1:
Считайте, что вы вошли в user_id = 123
систему.
- Используйте это в
ON
предложении, чтобы присоединять только избранное и лайки только для текущего зарегистрированного пользователя. - Убедитесь, что вы выполняете
LEFT JOIN
обаlikes
favorites
действия в таблице and, так как если текущий зарегистрированный пользователь не нравится или не включен в избранное, тогда сообщения все равно должны быть частью нашего набора результатов.
SELECT
p.id AS postID,
p.`date` AS postDate,
p.title AS postTitle,
a.author AS author,
IF(COUNT(DISTINCT l.id) > 0, 'yes', 'no') AS userLiked,
IF(COUNT(DISTINCT f.id) > 0, 'yes', 'no') AS userFavorited
FROM Posts p
INNER JOIN `Authors` a ON p.AuthorID = a.id
LEFT JOIN likes l ON p.id = l.post_id AND l.userID = 123
LEFT JOIN favorites f ON p.id = f.post_id AND f.userID = 123
GROUP BY p.id, p.`date`, p.`title`, a.author
Чтобы ограничить записи, используйте LIMIT
предложение и отфильтруйте posts
WHERE
предложение using .