我一直在寻找一个解决方案超过一个小时,并决定求助于此。
我正在为我的网站用户创建一个类似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排序,我如何(使用当前查询结构)能够通过以下时间戳将订单添加到列表中?
答案 0 :(得分:1)
"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;
以上可能会或可能不会起作用(我没有测试过);如果不,则 必须 使用加入查询。