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 */