我想执行一个用户列表,并在一个字段中提取每个用户完成的联系人列表,按联系人的类型分组。像这样的东西:
user_id, user_name, user_contact_views
100, john, 'a=21,b=22,c=3'
101, mary, 'a=53'
102, jack, 'b=13,c=5'
我有这个查询几乎可以工作
SELECT
u.id user_id,
u.name user_name,
(select group_concat(type_id_n_contacts)
from (select CONCAT(item_type_id, '=', count(*)) type_id_n_contacts
from item_contact ic
where ic.user_id = u.id
group by item_type_id) sq_type_id_n_contacts
) as user_contact_views
, ... -- Lots of fields
FROM user u
INNER JOIN -- Other tables, field, where and so on ignored
WHERE ...
ORDER BY ...
LIMIT ...;
但我明白了
Error Code: 1054. Unknown column 'u.id' in 'where clause'
我不能从嵌套查询中使用 u.id,如果你们知道任何解决方法,我将不胜感激。MySQL变量呢?如何将 u.id 的值获取到子子队列中的变量以使用 ic.user_id = @user_id?
重要提示:我必须在字段部分使用子查询。我可以通过在 JOIN 中创建一个临时表来使查询工作,其中所有预先计算的 users_id 与计数字符串相关(请参阅 Giulio 答案)。我知道,但是有太多的字段需要对整个用户表进行处理,然后再进行无索引的连接。这就是为什么我希望 MySQL 在查询执行的最后阶段只使用已经被 WHERE 和 LIMIT 过滤和限制的 user_id 来执行子查询。我希望我自己解释。
谢谢!