我对 MySQL 很陌生,我找不到任何解决这个问题的方法。我感谢各种帮助。
我有相互关联的表 A 和表 B。我希望从表 A 中进行选择,并按表 B 的“日期”列对结果进行排序。这两个表通过“user_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 开始,找出我需要加入的内容,一路验证我的记录看起来不错,然后开始限制列和过滤内容。您的里程可能会因方法的不同而有所不同,但验证数据始终是一个好主意。
关于mysql - 从一个表中选择并按另一表的列排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23344267/