mysql - 从一个表中选择并按另一表的列排序

标签 mysql sql

我对 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/

相关文章:

mysql - 一种从Mysql读取表数据到Pig的方法

php - 当我知道数据在我的表中时,mysql结果集为空

mysql - rake db:seed 失败并显示错误消息 Mysql2::Error: 你的 SQL 语法有错误

sql - 在 SQL 中,如何找到匹配一个条件的行,从中获取一个值并将其与同一表中的其他行匹配?

sql - Yii2 迁移转储 SQL

jquery - 如何每秒使用 jQuery 进行一次 ajax 调用?

PHP不显示数据

php - MySQL连接查询超过1个id

sql - 点周围的谷歌地图半径

javascript - 如何在查找 id 数组的 api 中等待循环完成?风 sails Js