gpt4 book ai didi

MySQL - 多次将多行连接到单行

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

我正在尝试连接单行的多行信息,但每次连接之一中有更多行时,它似乎都会成倍增加。

我的表结构如下:

news
id | title | public
------------------------
1 | Test | 0


news_groups_map
id | news_id | members_group_id
------------------------------------
1 | 1 | 5
2 | 2 | 6


members_groups_map
id | member_id | group_id
------------------------------
1 | 750 | 5
2 | 750 | 6

到目前为止我得到的查询是:

SELECT 
n.title,
n.public,

CAST(GROUP_CONCAT(ngm.members_group_id) AS CHAR(1000)) AS news_groups,
CAST(GROUP_CONCAT(member_groups.group_id) AS CHAR(1000)) AS user_groups

FROM news n

LEFT JOIN news_groups_map ngm ON n.id = ngm.news_id

JOIN (
SELECT group_id
FROM members_groups_map
WHERE member_id = 750
) member_groups

WHERE n.public = 0
GROUP BY n.id

但是结果如下:

title  |  public  |  news_groups  |  user_groups
-------------------------------------------------
Test | 0 | 5,6,5,6 | 6,6,5,5

如您所见,news_groupuser_groups 是重复的,因此如果一篇新闻文章分为 3 个组,则 user_groups 将是也相乘并显示类似 5,6,6,6,5,5 的内容。

如何对这些组进行分组,以便它们仅显示一次?

此处的最终目标是比较 news_groupsuser_groups。因此,如果至少有一个组匹配(意味着用户有足够的权限),则应该返回一个 bool 值,其中返回 true ,否则返回 false 。我也不知道该怎么做,但是,我想我应该先整理一下分组,因为一旦组的数量变大,就会有不必要的大量相同数据被选择。

谢谢!

最佳答案

最简单的方法是使用distinct:

SELECT n.title, n.public, 
GROUP_CONCAT(DISTINCT ngm.members_group_id) AS news_groups,
GROUP_CONCAT(DISTINCT mg.group_id) AS user_groups
FROM news n LEFT JOIN
news_groups_map ngm
ON n.id = ngm.news_id CROSS JOIN
(SELECT group_id
FROM members_groups_map
WHERE member_id = 750
) mg
WHERE n.public = 0
GROUP BY n.id;

这个查询实际上没有意义。首先,不需要子查询:

SELECT n.title, n.public, 
GROUP_CONCAT(DISTINCT ngm.members_group_id) AS news_groups,
GROUP_CONCAT(DISTINCTD mg.group_id) AS user_groups
FROM news n LEFT JOIN
news_groups_map ngm
ON n.id = ngm.news_id CROSS JOIN
members_groups_map mg
ON member_id = 750
WHERE n.public = 0
GROUP BY n.id;

其次,CROSS JOIN(或者等效地,没有 ON 子句的 JOIN)没有意义。通常,我希望有一个与其他表之一的连接条件。

关于MySQL - 多次将多行连接到单行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39571475/

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