MySQL从另一个表订购

时间:2015-03-12 23:35:45

标签: php mysql select inner-join

我一直在寻找一个解决方案超过一个小时,并决定求助于此。

我正在为我的网站用户创建一个类似Twitter的",以下系统,我希望能够显示特定用户关注或遵循的每个用户,我还想通过下表中的时间戳对它进行排序,降序,以便最新的关注者位于顶部。

我遇到的解决方案似乎都使​​用了内连接等,这一切都很好,但我想知道我当前的查询是否有逻辑解决方案来执行此操作。

表格结构: 用户:

id | username

如下:

id | follower_id | following_id | timestamp

我当前的查询:

SELECT * FROM users WHERE id IN (SELECT follower_id FROM follows WHERE following_id = $user_id) ORDER BY id ASC

当然这只是按用户ID排序,我如何(使用当前查询结构)能够通过以下时间戳将订单添加到列表中?

2 个答案:

答案 0 :(得分:1)

MySQL INNER JOIN

"SELECT users.* FROM users 
INNER JOIN follows ON follows.follower_id = users.id 
WHERE follows.following_id = $user_id 
ORDER BY follows.timestamp DESC";

答案 1 :(得分:0)

您可以使用多个列进行排序,如下所示:

ORDER BY [column1] [ASC|DESC], [columm2] [ASC|DESC], ...

因此,编辑查询的order by子句以包含第二列并按降序排序。

必须使用联接添加列;这是连接的基本语法:

SELECT [table_name].[column_name], ...
FROM [table1]
JOIN [table2] ON [join condition]
...

您的代码应该看起来像这样:

SELECT users.*
FROM users
JOIN follows ON users.id = follows.following_id
WHERE follows.following_id = $user_id
ORDER BY users.id ASC, follows.timestamp DESC

据我所知,没有加入表格就有没有的方式来做到这一点;也许它可以对返回的列表进行排序,但不保证):

SELECT * FROM users
WHERE id IN (SELECT follower_id FROM follows
  WHERE following_id = $user_id
  ORDER BY timestamp DESC)
ORDER BY id ASC;

以上可能会或可能不会起作用(我没有测试过);如果,则 必须 使用加入查询