首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql找不到正确的选择查询

mysql找不到正确的选择查询
EN

Stack Overflow用户
提问于 2012-04-08 22:08:28
回答 1查看 102关注 0票数 0

我试图为这个表构建select,但是我得到了奇怪的结果。我的桌子:

代码语言:javascript
复制
tbl_main
–––––––––––––––––-
id  user_id     name

tbl_friends
–––––––––––––––––-
id  user_id     main_id people

tbl_cats
–––––––––––––––––-
id  user_id     main_id

现在我只知道user_id了。我想获得这些项的结果(数组):

tbl_friends.main_id=tbl_main.id

  • get tbl_friends.main_id=tbl_main.id

  • count I需要tbl_main id列表(结果应按tbl_main.id DESC排序)

  • 计算tbl_friends中有多少唯一的人在tbl_friends.user_id=user_id和tbl_friends.user_id=user_id逗号分隔的列表(或数组)中,当tbl_friends.user_id=user_id和tbl_cats.user_id的唯一值tbl_friends.user_id=user_id时,tbl_friends.user_id=user_id和tbl_friends.user_id=user_id的唯一值cats.main_id = tbl_main.id

这应该是一个查询的结果。我尝试了许多计数(不同的)组合,但它不起作用,我完全迷失了。请帮帮忙。非常感谢

我试过这样的方法(见下文)。结果似乎没有问题,但它是否是正确的方法,如何做到这一点(3选择在一个查询)?那么服务器负载呢?对于大数据,它能正常工作吗?

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2012-04-09 00:42:17

我不确定我是否理解您想要做的事情,但是这应该返回与当前查询相同的结果,并且比两个标量相关子查询更有效-

代码语言:javascript
复制
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

比较这两个查询的解释输出,看看结果如何。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10066969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档