我正在尝试为此表构建选择,但我得到了奇怪的结果。我的桌子:
tbl_main
–––––––––––––––––-
id user_id name
tbl_friends
–––––––––––––––––-
id user_id main_id people
tbl_cats
–––––––––––––––––-
id user_id main_id
现在我只知道 user_id。我想获得这些项目的结果(数组):
- 我需要来自 tbl_main 的 id 列表(结果应按此 tbl_main.id DESC 排序)
- 当 tbl_friends.user_id=user_id AND tbl_friends.main_id=tbl_main.id 时,计算 tbl_friends 中有多少独特的人
- 当 tbl_friends.user_id=user_id AND tbl_friends.main_id=tbl_main.id 时,从 tbl_friends 获取逗号分隔的人员值列表(或数组)
- 当 tbl_cats.main_id = tbl_main.id 时计算 tbl_cats.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