在MySQL使用中间子查询GROUP_CONCAT
技术问答
373 人阅读
|
0 人回复
|
2023-09-14
|
我有一个MySQL查询,我想包含另一个表ID列表。人们可以在网站上添加一些项目,然后人们可以将它们添加到他们的收藏夹中。我基本上想得到最喜欢这产品的人ID列表(这有点简化,但可以归结为以下内容)。9 A/ d) |9 E) J/ z7 S$ |% z A/ b
基本上,我做这样的事:: f, ]7 U1 [" T7 k, T
SELECT *,GROUP_CONCAT((SELECT userid FROM favourites WHERE itemid = items.id) SEPARATOR , AS idlistFROM itemsWHERE id = $someid这样,以后再来idlist拆分到PHP在数组中,我可以在代码中进一步显示谁更喜欢某些项目,但我得到了以下信息MySQL错误:
: \' u; Z. [: M1242-子查询返回的行数超过1
( o& Z2 s+ F. l9 z" b我觉得是用的GROUP_CONCAT而不是例子CONCAT?我会以错误的方式处理吗?* Z6 M5 R1 [2 R- D
嗯,谢谢你到目前为止的回答,这似乎是可行的。然而,有一个陷阱。如果该项目由用户添加,则该项目也被视为最爱。因此,我需要进行其他检查creator3 K, K8 c9 L9 d" m" j
= userid。有人能帮我想出一种聪明(并希望有效)的方法吗?2 H% d& `3 D4 W, O$ Q: ]
谢谢!, j: W( w6 U- X. m% w6 r8 i4 [+ Q
编辑:我只是想做到这一点:
# w( Y5 ]; e1 t$ y$ Q" o! p: VSELECT [...] LEFT JOIN favourites ON (userid = itemid OR creator = userid)并且 idlist 是空的。请注意,如果我用它,INNER JOIN而不是LEFT JOIN空结果。即使我确定有满足感。ON要求的行。1 n9 f+ l. I! p
- ]1 ^- @! `" z( F, M) F! @' W2 H: G. R 解决方案: - A% c% `! \0 Z* ~( T3 ?2 ^- R+ [
在此类查询中不能访问外部作用域中的变量(不能访问)items.id在这里使用)。你应该尝试类似的。
+ W$ w( r- O, }- _5 A3 pSELECT 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;字段列表(名称、颜色、…)。 |
|
|
|
|
|