Don*_*len 8 php mysql sql-order-by
我有两张桌子.第一个表看起来像这样:
表:记录
rid | user id | title | whenadded | public -------------------------------------------------------------------- 1 212 Example 2012-06-28 1 2 217 Test Rec 2012-07-05 1 3 212 Another 2012-07-02 1 4 212 Unlisted 2012-05-02 0 5 217 Success 2012-04-08 1 6 238 Always 2012-04-18 1
表:喜欢
id | user id | rid | whenliked ------------------------------------------------------ 1 212 2 2012-07-06 2 205 1 2012-06-30 3 212 5 2012-07-04
在'Records'表中,'rid'被设置为主索引.在'Likes'表中,id被设置为主索引.
我正在使用PHP.PHP将为MySQL提供一个值作为参考.我想要一个MySQL查询,它将执行以下操作:
伪代码:
$userid = 212;
$SQL = 'SELECT DISTINCT records.*
FROM records,likes
WHERE (records.userid = ' . $userid .
' AND records.public = 1)
OR (records.id = likes.rid AND likes.userid = ' . $userid .
' AND records.public = 1)
ORDER BY likes.whenliked DESC, records.whenadded DESC
LIMIT 50;';
Run Code Online (Sandbox Code Playgroud)
查看我刚才提供的$ SQL查询.这是我尝试开发我想要的查询,但它没有实现我想要的; 它非常接近,但仍然订购不正确.该查询是我自己开发的最好的,然后根据我在StackFlow和Google上的其他地方搜索解决方案找到的.
这些是我试图通过以下方式订购它的条件:
返回的查询的最终结果将如下所示(请记住,当返回数据中不存在时,它仅供参考,因此您可以看到它是如何排序的):
rid | user id | title | whenadded | public | whenliked {not incl} ------------------------------------------------------------------------------------ 2 217 Test Rec 2012-07-05 1 2012-07-06 3 212 Another 2012-07-02 1 5 217 Success 2012-04-08 1 2012-06-30 1 212 Example 2012-06-28 1
希望有道理.随意提问,我会尽我所能澄清.
提前感谢您的时间,您的考虑,以及阅读本文.即使没有响应或找不到解决方案,您的时间仍然非常感谢!:)
您排序所依据的字段不必是数据库中的现有字段。您还可以使用您在选择中定义的字段:
SELECT IF(records.userid = ' . $userid . ', records.whenadded, likes.whenliked) as date
Run Code Online (Sandbox Code Playgroud)
现在您可以按部分顺序使用它:
ORDER BY date DESC
Run Code Online (Sandbox Code Playgroud)
来自MySQL 手册:
可以使用 AS alias_name 为 select_expr 指定别名。别名用作表达式的列名,可以在 GROUP BY、ORDER BY 或 HAVING 子句中使用