【发布时间】:2014-04-29 01:37:20
【问题描述】:
我对 MySQL 非常陌生,我找不到任何解决此问题的方法。感谢您提供各种帮助。
我有相互关联的表 A 和表 B。我希望从表 A 中选择并按表 B 的“日期”列排列结果。这 2 个表由“用户 ID”链接。我的表格如下:
Table A:
...
name
user_id (link to table B)
Table B:
user_id
date
有可能做到吗?再次感谢您的帮助!
【问题讨论】:
我对 MySQL 非常陌生,我找不到任何解决此问题的方法。感谢您提供各种帮助。
我有相互关联的表 A 和表 B。我希望从表 A 中选择并按表 B 的“日期”列排列结果。这 2 个表由“用户 ID”链接。我的表格如下:
Table A:
...
name
user_id (link to table B)
Table B:
user_id
date
有可能做到吗?再次感谢您的帮助!
【问题讨论】:
您想要进行内部连接。比如:
Select A.user_id, A.name, B.date from A
INNER JOIN B ON B.user_id = A.user_id
WHERE (whatever your filtering is)
ORDER BY B.date
你应该做一些关于加入的研究,因为它对于数据库开发来说是一件非常重要和至关重要的事情(并且了解它有助于建立良好的架构)。
它的要点是,对于 A 中的每个 user_id,我想在 B 中找到匹配的 user_id(因为 INNER JOIN B ON B.user_id = A.user_id 行)。内连接只引入匹配的内容,因此如果 A 的 ID 为 2,但 B 中没有 ID 为 2,则不会返回记录(类似于 B 中的记录而 A 中没有记录)。
现在,需要注意的一点是,如果我在 A 中有一条用户 ID 为 5 的记录,但在 B 中有两条用户 ID 为 5 的记录,则内部连接返回两条记录,将 A 数据与每个记录连接起来B 数据。
现在,正如您对这个问题的评论所问的那样,您想要获得更高的评级,您想要最大的功能。
Select A.user_id, A.name, B.date, Max(B.rating) from A
INNER JOIN B ON B.user_id = A.user_id
WHERE (whatever your filtering is)
GROUP BY A.user_id
ORDER BY B.date
这有两部分,聚合函数 Max() 和 Group By 语句。它们一起工作,因此对于每个唯一的 A.user_id,数据库将返回具有最高 B.rating 的记录集。您还可以使用 Min() 等函数,它是相反的,选择最低的 B.rating,或 Count() 将计算记录的出现次数,或 Sum() 将添加该列的记录。
与数据库查询一样,尝试使用它们,确保返回正确的数据并了解原因。当我构建查询时,我通常从 select * from table 开始,弄清楚我需要加入什么,沿途验证我的记录看起来不错,然后开始限制列和过滤东西。您的里程可能因方法而异,但验证数据始终是一个好主意。
【讨论】: