Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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,我已确定我的问题: SELECT * FROM `participation` LEFT JOIN parties ON parties.id = participation.party_id WHERE `riding_id` = 10001 AND `election_id` = 41 ORDER BY num_votes DESC LIMIT 1 这准确地产生了我想要的结果 结果是该党的得票最多 现在我想对表的每一行执行相同的查询ridings 其中包含所有骑行id行。有点

我已确定我的问题:

SELECT * 
FROM  `participation` 
LEFT JOIN parties ON parties.id = participation.party_id
WHERE  `riding_id` = 10001
AND  `election_id` = 41
ORDER BY num_votes DESC 
LIMIT 1
这准确地产生了我想要的结果

结果是该党的得票最多


现在我想对表的每一行执行相同的查询ridings 其中包含所有
骑行id
行。有点麻烦

我不想联接另一个表,但要遍历每一行,并在每一行上执行与上面相同的计算

比如:

SELECT * 
    FROM  `participation` 
    LEFT JOIN parties ON parties.id = participation.party_id
    WHERE  `riding_id` = "LOOP ALL riding_id IN ridings TABLE"
    AND  `election_id` = 41
    ORDER BY num_votes DESC 
    LIMIT 1

任何帮助都将不胜感激。

只需使用子查询即可:

SELECT * 
FROM  participation LEFT JOIN
      parties
      ON parties.id = participation.party_id
WHERE  riding_id IN (SELECT riding_id FROM ridings) AND
       election_id = 41
ORDER BY num_votes DESC 
但是,你不再是最能赢得选票的人。你得到了一切

下面是一种使用变量的方法,它可以为每个
骑行id
获得最高票:

SELECT *
FROM (SELECT *,
             (@rn := if(@r = riding_id, @rn + 1,
                        if(@rn := riding_id, 1, 1)
                       )
             ) as seqnum
      FROM  participation LEFT JOIN
            parties
            ON parties.id = participation.party_id CROSS JOIN
            (SELECT @rn := 0, @r := -1) params
      WHERE  riding_id IN (SELECT riding_id FROM ridings) AND
             election_id = 41
      ORDER BY riding_id, num_votes DESC 
     ) pp
WHERE seqnum = 1;

仅使用子查询很有诱惑力:

SELECT * 
FROM  participation LEFT JOIN
      parties
      ON parties.id = participation.party_id
WHERE  riding_id IN (SELECT riding_id FROM ridings) AND
       election_id = 41
ORDER BY num_votes DESC 
但是,你不再是最能赢得选票的人。你得到了一切

下面是一种使用变量的方法,它可以为每个
骑行id
获得最高票:

SELECT *
FROM (SELECT *,
             (@rn := if(@r = riding_id, @rn + 1,
                        if(@rn := riding_id, 1, 1)
                       )
             ) as seqnum
      FROM  participation LEFT JOIN
            parties
            ON parties.id = participation.party_id CROSS JOIN
            (SELECT @rn := 0, @r := -1) params
      WHERE  riding_id IN (SELECT riding_id FROM ridings) AND
             election_id = 41
      ORDER BY riding_id, num_votes DESC 
     ) pp
WHERE seqnum = 1;

谢谢Gordon-在第二个查询中-我得到错误“重复的列名'id'”,但我只看到一次对“id”的引用?@kreevp。这是因为
选择*
。实际上,你应该只列出你想要的列。谢谢戈登-在第二次查询中-我得到错误“重复的列名'id'”,但我只看到一次对“id”的引用?@kreevp。这是因为
选择*
。实际上,您应该只列出所需的列。