【问题标题】:Get counts and results from different tables in MySQL从 MySQL 中的不同表中获取计数和结果
【发布时间】:2020-10-20 13:21:01
【问题描述】:

我们正在尝试从表 1、表 2 中获取结果,并获取表 3,4 中每个结果 id 的列数。

下面是我们的表格:

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,但我只得到收藏/喜欢表中存在的结果。我需要来自帖子 Table1 的 6 个结果(限制 6 个),并检查用户是否喜欢/收藏了每个结果。

预期的 JSON 输出:

{
  posts: [{
    "postID": 321,
    "postDate": "20/10/2020",
    "postTitle": "Test",
    "author": "Jack",
    "userLiked": "yes",
    "userFavorited": "no",
   },
   .....
  ]
}

【问题讨论】:

  • 向我们展示预期的输出,为什么是 6?您想要包含作者、喜欢和收藏计数的帖子列表吗?
  • @JitendraYadav 这是包含这些详细信息的帖子列表
  • @JitendraYadav 我用预期的输出编辑了我的问题
  • 为此使用LEFT JOIN
  • @Slava Rozhnev 你能根据这些表创建 sql 吗?我使用了左连接,但它只返回表收藏夹或喜欢中存在的结果,而不是所有帖子

标签: mysql


【解决方案1】:

假设您登录了user_id = 123

  • ON 子句中使用它来仅加入当前登录用户的收藏夹和点赞。
  • 确保在likesfavorites 表上都使用LEFT JOIN,就好像当前登录的用户没有被喜欢或收藏,那么帖子仍然应该是我们结果集的一部分。
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 子句并使用WHERE 子句过滤掉posts

【讨论】:

    猜你喜欢
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2020-09-30
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多