回答

收藏

在MySQL使用中间子查询GROUP_CONCAT

技术问答 技术问答 178 人阅读 | 0 人回复 | 2023-09-14

我有一个MySQL查询,我想包含另一个表ID列表。人们可以在网站上添加一些项目,然后人们可以将它们添加到他们的收藏夹中。我基本上想得到最喜欢这产品的人ID列表(这有点简化,但可以归结为以下内容)。% o. a* ~( k/ M/ Z# L0 z
基本上,我做这样的事:
) k3 ]+ Y9 H4 {! o* c" ~( G* hSELECT *,GROUP_CONCAT((SELECT userid FROM favourites WHERE itemid = items.id) SEPARATOR , AS idlistFROM itemsWHERE id = $someid这样,以后再来idlist拆分到PHP在数组中,我可以在代码中进一步显示谁更喜欢某些项目,但我得到了以下信息MySQL错误:
; o, E0 K' H) F! Z2 u' [1242-子查询返回的行数超过1
, A) ?, N1 o* s2 o
我觉得是用的GROUP_CONCAT而不是例子CONCAT?我会以错误的方式处理吗?
, j, B% Q  H( w! O$ J6 `, e. D嗯,谢谢你到目前为止的回答,这似乎是可行的。然而,有一个陷阱。如果该项目由用户添加,则该项目也被视为最爱。因此,我需要进行其他检查creator% j0 n# t" m, H/ E1 t
= userid。有人能帮我想出一种聪明(并希望有效)的方法吗?
" t  |4 C  r: S谢谢!
! y+ p* K; x' q编辑:我只是想做到这一点:% X; C% @4 N* `1 v
SELECT [...] LEFT JOIN favourites ON (userid = itemid OR creator = userid)并且 idlist    是空的。请注意,如果我用它,INNER JOIN而不是LEFT JOIN空结果。即使我确定有满足感。ON要求的行。1 L, o3 t, ?3 f
                                                               
' t  o. g0 H* W6 k' p    解决方案:                                                               
4 D5 l1 |8 q. k1 s6 e                                                                在此类查询中不能访问外部作用域中的变量(不能访问)items.id在这里使用)。你应该尝试类似的。
9 ]: J5 Z9 g: sSELECT    items.name,   items.color,   CONCAT(favourites.userid) as idlistFROM    itemsINNER JOIN favourites ON items.id = favourites.itemidWHERE    items.id = $someidGROUP BY    items.name,   items.color;字段列表(名称、颜色、…)。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则