gpt4 book ai didi

PHP 和 Mysql - 两个表之间的左外连接

转载 作者:行者123 更新时间:2023-11-29 14:57:21 25 4
gpt4 key购买 nike

我有两个表,分别称为“事件”和“主题”,每个表可以有很多评论。

我需要做的是列出所有事件和主题以及每行的评论量。我已经成功返回所有主题,效果很好,但我不知道如何将事件表添加到 MySql。下面列出了评论和事件表字段。谁能帮我解决这个问题吗?

事件:

  • 身份证
  • Event_Name

评论:

  • post_id <-- 事件或主题表的相关 ID
  • table <-- 该行所属的表,因此可以是主题或事件

    SELECT 
    t.id, t.title, c.created_at,
    IF(ISNULL(c.allComments), 0, c.allComments) AS totalComments
    FROM topics AS t
    LEFT OUTER JOIN (
    SELECT created_at, post_id, COUNT(*) AS allComments
    FROM comments
    GROUP BY post_id
    ) AS c ON c.post_id = t.id
    ORDER BY tc.created_at DESC, c.allComments DESC

最佳答案

听起来事件和主题应该是同一个表。

不过,我认为我们可以通过 UNION 来做到这一点。我希望事件和主题有相同的栏目吗? (或者至少是同样重要的?)

(SELECT c.table as event_or_topic, e.*, count(C.table), MAX(C.created_at) as latest_c
FROM events E LEFT JOIN comments C on (C.post_id = E.id)
WHERE C.table = 'Events'
GROUP BY C.post_id)
UNION
(SELECT c.table as event_or_topic, t.id*, count(C.table), MAX(C.created_at) as latest_c
FROM topics T LEFT JOIN comments C on (C.post_id = E.id)
WHERE C.table = 'Topics'
GROUP BY C.post_id)
ORDER BY latest_c

请注意,ORDER BY 适用于整个 UNION,而不是单个 SELECT。

使用 LEFT JOIN 应该允许那些没有注释的行仍然显示。我认为问题在于我们的部分选择依赖于评论(即 - C.table、最后评论的排序等)。计数应该没问题 - 如果没有评论,计数将为零。

您可能需要稍微更改 SELECT 部分。我想显示 C.table,以便您知道一行是主题还是事件,但我担心它可能会搞砸计数。除了计数之外,您还需要评论中的任何内容吗?您在查询中使用了除 post_id 和表之外的一些列,而您忽略了在问题中进行解释。

您仍然有我不知道它们是什么的列,例如 Comment 的 zoneTable

关于PHP 和 Mysql - 两个表之间的左外连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4268148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com