SQL如何连接这些表

时间:2013-06-09 12:41:19

标签: mysql sql database

情景:

我有一个网站,让用户在他们最喜欢的汽车之间投票。汽车保存在表格cars中,投票保存在votes中,而列表country_id则从表格cars引用countries(carbrand来自的地方)。

我想向用户显示哪个国家/地区的投票率最高。简单版本的表格:

CARS

id
name
country_id

国家

id
name

投票

id
user_id
car_id

理想情况下,我想向用户展示前x个国家/地区。他们都有多少票。

加分:是否可以将此查询用于特定用户?所以他们看到他们的最高x与他们投票的国家。

你建议使用哪些索引?投票表可以超过1000万票,汽车表也可以快速增长。

2 个答案:

答案 0 :(得分:1)

我认为您可以使用LEFT JOIN查询和GROUP BY聚合函数

来实现此目的
SELECT COUNT(a.id) as total_votes, c.name as country_name
FROM Votes a
LEFT JOIN CARS b
ON a.car_id = b.id
LEFT JOIN Countries c
ON b.country_id = c.id
GROUP BY b.name, c.name
ORDER BY total_votes DESC

答案 1 :(得分:1)

Cars.CountryID,Votes.UserID和Votes.CarID上的索引似乎是合理的。正如mzedler建议的那样,当你达到数千万时,聚合可能是一个坏主意。

有多种方法可以解决这些问题,触发器,缓存或添加投票选票的日期,因此您可以分解您必须一次性计算的记录数。例如,每天缓存投票,然后只查询自午夜以来的投票,然后对它们求和。