首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL如何连接这些表

SQL如何连接这些表
EN

Stack Overflow用户
提问于 2013-06-09 12:41:19
回答 2查看 75关注 0票数 0

设想情况:

我有一个网站,让用户投票之间的汽车,他们最喜欢。汽车保存在表cars中,选票保存在votes中,列country_id从表cars引用保存到countries (汽车品牌来自那里)。

我想向用户展示哪个国家拥有最多的选票。表的简单版本:

CARS

代码语言:javascript
运行
复制
id
name
country_id

Countries

代码语言:javascript
运行
复制
id
name

Votes

代码语言:javascript
运行
复制
id
user_id
car_id

理想情况下,我想向用户展示排名前十的国家。他们都有多少选票。

的好处是:是否可以对某个用户使用此查询?所以他们看到了他们所投票的国家的头等大事。

你建议什么索引?选票表可以增长超过1000万张选票,汽车表也可以快速增长。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-09 12:45:19

我认为您可以通过LEFT JOIN查询和GROUP BY聚合函数来实现这一点。

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2013-06-09 12:57:15

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

解决这个问题的方法有很多,触发器、缓存或将日期添加到选票中,这样就可以在一次投票中分解必须计数的记录数。例如,缓存每天投票,然后查询自午夜以来所做的,然后对它们进行汇总。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17009706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档