gpt4 book ai didi

mysql - 在 MySQL 中的子查询上使用 GROUP_CONCAT

转载 作者:IT老高 更新时间:2023-10-28 12:59:15 24 4
gpt4 key购买 nike

我有一个 MySQL 查询,我想在其中包含另一个表中的 ID 列表。在网站上,人们可以添加某些项目,然后人们可以将这些项目添加到他们的收藏夹中。我基本上想获取收藏该项目的人的 ID 列表(这有点简化,但归根结底就是这样)。

基本上,我会这样做:

SELECT *,
GROUP_CONCAT((SELECT userid FROM favourites WHERE itemid = items.id) SEPARATOR ',') AS idlist
FROM items
WHERE id = $someid

这样,我可以通过稍后在我的代码中将 idlist 拆分为 PHP 中的数组来显示谁最喜欢某个项目,但是我收到以下 MySQL 错误:

1242 - Subquery returns more than 1 row

我认为这是使用 GROUP_CONCAT 而不是例如 CONCAT 的意义所在?我是不是走错了路?


好的,感谢到目前为止的答案,这似乎有效。但是,有一个问题。如果项目是由该用户添加的,则该项目也被视为收藏夹。所以我需要一个额外的检查来检查creator = userid。有人可以帮我想出一个聪明的(并且希望是有效的)方法来做到这一点吗?

谢谢!

编辑:我只是尝试这样做:

SELECT [...] LEFT JOIN favourites ON (userid = itemid OR creator = userid)

idlist 为空。请注意,如果我使用 INNER JOIN 而不是 LEFT JOIN 我会得到一个空结果。即使我确定有满足 ON 要求的行。

最佳答案

OP 几乎做对了。 GROUP_CONCAT 应该包装子查询中的列,而不是 complete subquery (我忽略了分隔符,因为逗号是默认的):

SELECT i.*,
(SELECT GROUP_CONCAT(userid) FROM favourites f WHERE f.itemid = i.id) AS idlist
FROM items i
WHERE i.id = $someid

这将产生所需的结果,也意味着接受的答案部分错误,因为您可以在子查询中访问外部范围变量。

关于mysql - 在 MySQL 中的子查询上使用 GROUP_CONCAT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/377850/

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