Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.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
Php mysql-未知列在';在/ALL/ANY子查询中';_Php_Mysql - Fatal编程技术网

Php mysql-未知列在';在/ALL/ANY子查询中';

Php mysql-未知列在';在/ALL/ANY子查询中';,php,mysql,Php,Mysql,我有一个名为“投票”的下表,其中存储了参与者的向上投票(1)和向下投票(-1)。我想获得前三名投票参与者ID及其总投票数,其中总投票数=向上投票-向下投票。我编写了如下所示的查询,但出现错误:“in/ALL/ANY子查询”中的未知列“total_voces” 预期结果将是 ------------------------------- |参与者id |总票数| +------+-------+--------+------+ | 2 | 3 |

我有一个名为“投票”的下表,其中存储了参与者的向上投票(1)和向下投票(-1)。我想获得前三名投票参与者ID及其总投票数,其中总投票数=向上投票-向下投票。我编写了如下所示的查询,但出现错误:“in/ALL/ANY子查询”中的未知列“total_voces”

预期结果将是 ------------------------------- |参与者id |总票数| +------+-------+--------+------+ | 2 | 3 | 5 | 2 | 1 | 1 | 3 | 1 +------+-------+--------+------+
由于您的表中没有
total_vows
列,您需要执行以下操作:

SELECT `participant_id`, SUM( `vote` ) AS total_votes FROM `votes` 
WHERE votes IN  
(SELECT total_votes FROM  
(SELECT DISTINCT (SUM( vote )) AS total_votes FROM  `votes` GROUP BY  `participant_id` 
ORDER BY `total_votes` DESC LIMIT 0 , 3) AS temp )  
GROUP BY `participant_id`

您可以使用join重新编写查询,以获取投票分数位于前三名投票中的前三名参与者,即前三名投票为(3,2,1)


检查此简单查询:

SELECT 
participant_id, total_votes 
FROM 
(SELECT participant_id,SUM(vote) total_votes 
FROM votes 
GROUP BY participant_id) a 
ORDER BY total_votes DESC 
LIMIT 3;
要获得前三名投票的所有参与者,您可以使用以下查询:

SELECT 
a.participant_id, b.total_votes 
FROM 
(SELECT participant_id, SUM(vote) total_votes 
FROM votes 
GROUP BY participant_id) a 
JOIN 
(SELECT participant_id,SUM(vote) total_votes 
FROM votes 
GROUP BY participant_id 
ORDER BY total_votes DESC LIMIT 3) b
ON a.total_votes=b.total_votes 
ORDER BY total_votes DESC;

@hardik如果参与者的分数与您的样本数据中的分数相同,则此查询将跳过id为3的参与者,尽管此参与者的投票分数也为top3s@MKhalidJunaid根据查询,他只需要前三名。@ZafarMalik查看他的问题和预期结果partright@khalid。。。你的答案很完美。。。我不想要前三名参与者的ID,而是前三名投票人,他们可能有相同的投票权……ok@hardik第二次查询将满足您的要求,我之前误解了您的要求。感谢khalid的反馈。这非常有效。。。只有我必须添加的是参与者ID的独特性。。。谢谢
SELECT `participant_id`, SUM( `vote` ) AS total_votes FROM `votes` 
WHERE votes IN  
(SELECT total_votes FROM  
(SELECT DISTINCT (SUM( vote )) AS total_votes FROM  `votes` GROUP BY  `participant_id` 
ORDER BY `total_votes` DESC LIMIT 0 , 3) AS temp )  
GROUP BY `participant_id`
SELECT t.* FROM
(SELECT `participant_id`, SUM( `vote` ) AS total_votes 
FROM `votes` 
GROUP BY `participant_id`
) t
JOIN  (SELECT SUM( `vote` ) AS total_votes FROM `votes` 
GROUP BY `participant_id`
ORDER BY `total_votes` DESC LIMIT 0 , 3 ) t1
USING(total_votes)
ORDER BY t.total_votes DESC
SELECT 
participant_id, total_votes 
FROM 
(SELECT participant_id,SUM(vote) total_votes 
FROM votes 
GROUP BY participant_id) a 
ORDER BY total_votes DESC 
LIMIT 3;
SELECT 
a.participant_id, b.total_votes 
FROM 
(SELECT participant_id, SUM(vote) total_votes 
FROM votes 
GROUP BY participant_id) a 
JOIN 
(SELECT participant_id,SUM(vote) total_votes 
FROM votes 
GROUP BY participant_id 
ORDER BY total_votes DESC LIMIT 3) b
ON a.total_votes=b.total_votes 
ORDER BY total_votes DESC;