我正在尝试为此表构建select但是我得到了奇怪的结果。 我的桌子:
tbl_main
–––––––––––––––––-
id user_id name
tbl_friends
–––––––––––––––––-
id user_id main_id people
tbl_cats
–––––––––––––––––-
id user_id main_id
现在我只知道user_id。我想得到这些项目的结果(数组):
这应该是一个查询的结果。我正在尝试许多COUNT(DISTINCT)组合,但它不起作用,我完全迷失了。请帮忙。非常感谢
我试过这样的事情(见下文)。结果似乎没问题,但它是如何做到的正确方法(在一个查询中选择3个)?服务器负载怎么样?大数据可以正常工作吗?
SELECT e.id
(SELECT GROUP_CONCAT(DISTINCT ef.people) FROM tbl_friends ef WHERE ef.user_id=$user_id AND ef.main_id=e.id) as result_people,
(SELECT COUNT(DISTINCT et.user_id) FROM tbl_cats et WHERE et.main_id=e.id) as total
FROM tbl_main e
WHERE e.user_id = $user_id
ORDER BY e.id DESC
答案 0 :(得分:0)
我不确定我是否理解你要做的事情,但这应该返回与当前查询相同的结果,并且比两个标量相关的子查询更有效 -
SELECT
tm.id,
GROUP_CONCAT(DISTINCT tf.people) AS result_people,
COUNT(DISTINCT tc.user_id) AS total
FROM tbl_main tm
LEFT JOIN tbl_friends tf
ON tm.id = tf.main_id
AND tm.user_id = tf.user_id
LEFT JOIN tbl_cats tc
ON tm.id = tc.main_id
WHERE tm.user_id = $user_id
GROUP BY tm.id DESC
比较两个查询的EXPLAIN输出,看看它们是如何运作的。