我有两张桌子。第一个表如下所示:
表:记录
摆脱| 用户名 | 标题 | 添加时 | 上市 -------------------------------------------------- ------------------ 1 212 示例 2012-06-28 1 2 217 测试建议 2012-07-05 1 3 212 另一个 2012-07-02 1 4 212 未上市 2012-05-02 0 5 217 成功 2012-04-08 1 6 238 总是 2012-04-18 1
表:喜欢
编号 | 用户名 | 摆脱| 喜欢的时候 -------------------------------------------------- ---- 1 212 2 2012-07-06 2 205 1 2012-06-30 3 212 5 2012-07-04
在'Records'表中,'rid'被设置为主索引。在“喜欢”表中,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;';
看看我上面刚刚提供的 $SQL 查询。这是我开发我想要的查询的尝试,但它没有达到我想要的;它非常接近,但它仍然订购不正确。该查询是我自己首先尽可能地开发的,然后基于我在 StackFlow 和 Google 其他地方搜索解决方案所找到的结果。
这些是我试图通过以下方式订购的条件:
- 选择的所有记录都必须是公开的 (records.public = 1)。
- 如果记录属于用户(在本例中为 212),则按 records.when added 对记录进行排序。
- 如果记录不属于用户,但它是用户喜欢的记录,则通过 likes.whenliked 对记录进行排序。
- 日期将按从最新到最旧的顺序排列。
返回的查询的最终结果如下所示(请记住,whenliked 不在返回数据中,它只是供参考,因此您可以看到它是如何排序的):
摆脱| 用户名 | 标题 | 添加时 | 公共 | 喜欢时{不包括} -------------------------------------------------- ---------------------------------- 2 217 测试建议 2012-07-05 1 2012-07-06 3 212 另一个 2012-07-02 1 5 217 成功 2012-04-08 1 2012-06-30 1 212 示例 2012-06-28 1
希望这是有道理的。随意提问,我会尽我所能澄清。
提前感谢您的时间、考虑和阅读本文。即使没有响应或没有找到解决方案,仍然非常感谢您的时间!:)