我有一个MySQL查询,我想在其中包含来自另一个表的ID列表.在该网站上,人们可以添加某些项目,然后人们可以将这些项目添加到自己的Collection 夹中.我基本上想得到那些喜欢这个项目的人的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
?我走错方向了吗?
好的,谢谢你迄今为止的答案,这似乎很有效.然而,有一个trap .如果由该用户添加,则项目也被视为最受欢迎的项目.所以我需要额外判断creator=userid.有人能帮我想出一个聪明的(希望是高效的)方法来做到这一点吗?
非常感谢.
编辑:我只是试着这么做:
SELECT [...] LEFT JOIN favourites ON (userid = itemid OR creator = userid)
idlist是空的.请注意,如果我使用INNER JOIN
而不是LEFT JOIN
,我会得到一个空结果.尽管我确信有些行符合ON要求.