Mysql SQL连接多个匹配项

Mysql SQL连接多个匹配项,mysql,sql,Mysql,Sql,我的问题是我有两个表: 构建(98%的信息存储在此处) 地图(每个构建都是为地图创建的,下面列出了这些) 投票(每个用户对特定构建的投票存储在此处) 现在我想根据获得的投票数对构建进行排序,但是如果我做一个简单的左连接,我会从同一个构建中获得多行投票。 相反,我想把所有的选票加起来,这样最终就不会有: 建72。投票=1 建72。投票=1 建72。投票=-1 建72。投票=1 因此,我宁愿: 建72。投票=2(因为1+1+-1+1=2) 以下是我用于搜索/排序的代码 $quer

我的问题是我有两个表:

  • 构建(98%的信息存储在此处)

  • 地图(每个构建都是为地图创建的,下面列出了这些)

  • 投票(每个用户对特定构建的投票存储在此处)

现在我想根据获得的投票数对构建进行排序,但是如果我做一个简单的左连接,我会从同一个构建中获得多行投票。 相反,我想把所有的选票加起来,这样最终就不会有:

  • 建72。投票=1
  • 建72。投票=1
  • 建72。投票=-1
  • 建72。投票=1
因此,我宁愿:

  • 建72。投票=2(因为1+1+-1+1=2)
以下是我用于搜索/排序的代码

    $query = sprintf('
        SELECT
            b.*, maps.name AS mapname, votes.vote AS vote
        FROM 
            builds as b
        INNER JOIN
            maps ON maps.id = b.map
        LEFT JOIN
            votes ON votes.fk_build = b.id
        WHERE
            fk_buildstatus = 1 AND
            ' . implode(' ', $set) . ' 1=1
        ORDER BY ' . $by . ' ' . $order . '
        ' . $limitcode);
基本上,你可以忽略从哪里到下面的一切,只是为了完成而发布它

(我希望你能理解我,我的问题不是noobish)

编辑:由于注释中提到的求和函数,我的问题通过如下修改查询得到解决:

解决方案
你能这样做吗?我无法测试它,因为我没有您的数据集或表结构

SELECT
            b.*, maps.name AS mapname, SUM(IFNULL(votes.vote,0)) AS vote
        FROM 
            builds as b
        INNER JOIN
            maps ON maps.id = b.map
        LEFT JOIN
            votes ON votes.fk_build = b.id
group by /* Add your group by columns here */

使用
sum
函数。您将需要一个子查询来获取投票总数,然后您的外部查询可以通过b.*从子查询的组中获取其他列和总数。有效吗?我刚刚创建了一个测试表,而您的右侧它不起作用。我更新了答案。我不知道他们想按什么列分组,只是复制了select中的内容。
SELECT
            b.*, maps.name AS mapname, SUM(IFNULL(votes.vote,0)) AS vote
        FROM 
            builds as b
        INNER JOIN
            maps ON maps.id = b.map
        LEFT JOIN
            votes ON votes.fk_build = b.id
group by /* Add your group by columns here */