我这里有个列表查询如下,两张表是 1 对多的,实际上字段比较多例子上做了些简化,数据量应该就 10 到 20 万左右 ,要分页和做筛选,
现在有个问题,如果在 where 里写条件会影响 GROUP_CONCAT 的结果 我能想到的就是把 select 或者 where 之一改为子查询, 但是不确认会不会产生性能的问题,想请大佬确认看看有没有更好的方法
SELECT
u.id,
u.name,#小王
GROUP_CONCAT(i.email) AS email,#test@abc.com,xyz@123.com
GROUP_CONCAT(i.phone) AS phone #13711112222,13966665555
FROM user u
LEFT JOIN contact i ON u.id = i.ref_id
GROUP BY u.id;
方式 1
SELECT
u.id,
u.name,
GROUP_CONCAT(i.email) AS email,
GROUP_CONCAT(i.phone) AS phone
FROM user u
LEFT JOIN contact i ON u.id = i.ref_id
WHERE u.id IN (SELECT ref_id FROM contact WHERE phone LIKE '%137%')
AND u.id IN (SELECT ref_id FROM contact WHERE email LIKE '%abc.com%')
GROUP BY u.id;
方式 2
SELECT
u.id,
u.name,
(SELECT GROUP_CONCAT(email) FROM contact WHERE u.id = ref_id) AS email,
(SELECT GROUP_CONCAT(phone) FROM contact WHERE u.id = ref_id) AS phone
FROM user u
LEFT JOIN contact i ON u.id = i.ref_id
WHERE i.phone LIKE '%137%'
AND i.email LIKE '%qq.com%'
GROUP BY u.id;
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.