Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要关于如何在单个MySQL查询中执行此操作的建议吗_Mysql - Fatal编程技术网

需要关于如何在单个MySQL查询中执行此操作的建议吗

需要关于如何在单个MySQL查询中执行此操作的建议吗,mysql,Mysql,这可以在一个MySQL查询中实现吗?基本上,我需要根据用户的响应数量对其进行排序。我有两张桌子 table "users": id username ------------------ 1 hunter 2 loserville 还有一个 table "responses": id user_id response ------------------------------- 1 1 yes 1

这可以在一个MySQL查询中实现吗?基本上,我需要根据用户的响应数量对其进行排序。我有两张桌子

table "users":
id      username
------------------
1       hunter
2       loserville
还有一个

table "responses":
id      user_id     response
-------------------------------
1         1            yes
1         2            yes
1         1            no
1         1            yes
我需要这样的东西

SELECT users.id
FROM users
    UNION ALL 
        SELECT COUNT(responses.id) As num_responses
        FROM responses
        WHERE user_id = users.id
ORDER BY num_responses DESC

不幸的是,它不起作用。有什么建议吗?如果你感到困惑,请告诉我!谢谢您的时间。

我想您想使用的是GROUP BY子句

SELECT users.id, users.username, count(*) as responses
FROM   users LEFT JOIN responses
       ON users.Id = responses.user_id
GROUP BY users.id, users.username
ORDER BY count(*) DESC
您可能需要这样的查询

SELECT users.id, COUNT(*) AS responses 
    FROM users JOIN responses ON users.id = responses.user_id 
    GROUP BY user_id ORDER BY responses DESC
(如果不想从users表中获得任何信息,可以省略联接,只对响应进行查询

连接列出所有用户及其响应,然后统计条目数。

SELECT  u.id, COUNT(r.id) AS cnt
FROM    users u
LEFT JOIN
        responses r
ON      r.user_id = u.id
        AND r.response = 'yes'
GROUP BY
        u.id
ORDER BY
        cnt DESC
或者这个:

SELECT  u.id,
        (
        SELECT  COUNT(*)
        FROM    responses r
        WHERE   r.user_id = u.id
                AND r.response = 'yes'
        ) cnt
FROM    users u
ORDER BY
        cnt DESC

前者在
InnoDB
中通常更快,后者在
MyISAM

中更快,感谢您的响应,但我不得不做一个左连接,这对meThat有效。事实上,左连接也会列出没有做出任何响应的人。但是,我不确定COUNT(*)将正常工作。对于尚未发布的用户,它可能会列出1个响应,而不是0。