Получить подсчеты и результаты из разных таблиц в MySQL

#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 .