代码
SELECT t1.*
FROM table_one_items t1
INNER JOIN (SELECT t2.item_id,
t2.date_favorited
FROM table_two_favorites t2
WHERE t2.user_id IN( 1, 2, 3 )) t3
ON t1.item_id = t3.item_id
OR t1.user_id IN( 1, 2, 3 )
WHERE t1.published = 1
GROUP BY t1.item_id
ORDER BY t3.date_favorited DESC,
t1.date_created DESC
问题:
我正在寻找chronological order
中的项目,尽管来自一个表和一个subquery
表及其自己的日期列。我该怎么做呢?
我尝试了什么:
我尝试移动t3.date
并订购subquery
本身,但这不起作用。任何修改子查询的尝试都会改变结果集,我想不出另一种方法来编写它以获得相同的结果但是具有正确的顺序。我知道可能有更好的方法来编写这个查询,但我也无法解决这个问题。我觉得这很有用!
其他信息:
第一个表是所有项目的索引,而第二个表是“收藏夹”表,仅包含已被用户收藏的项目。使用t1.item_id = t3.item_id OR t1.user_id IN(1,2,3)
我基本上会在t1中获取由这些用户创建的项目或已被这些用户收藏的项目。
示例:
表一“项目表”:(日期为“创建日期”)
item_id 1 user_id 2 date_created 2015-01-1 00:00:00
item_id 2 user_id 2 date_created 2015-01-3 00:00:00
item_id 3 user_id 1 date_created 2015-01-5 00:00:00
item_id 4 user_id 3 date_created 2015-01-7 00:00:00
表二“用户收藏夹”:(日期为“日期收藏”)
item_id 2 user_id 2 date_favorited 2015-01-6 00:00:00
item_id 1 user_id 2 date_favorited 2015-01-6 00:00:00
item_id 1 user_id 3 date_favorited 2015-01-8 00:00:00
期望的结果:
item_id 3 (ordered by date_created: 2015-01-5 00:00:00)
item_id 4 (ordered by date_created: 2015-01-7 00:00:00)
item_id 2 (ordered by date_favorited: 2015-01-6 00:00:00)
item_id 1 (ordered by date_favorited: 2015-01-8 00:00:00)
当前结果:
item_id 1 (ordered by date_created)
item_id 2 (ordered by date_created)
item_id 3 (ordered by date_created)
item_id 4 (ordered by date_created)
非常感谢任何帮助。 (而且我一定会给出答案!)
答案 0 :(得分:1)
尝试在ORDER BY中使用CASE语句来选择所需的日期,所以:
ORDER BY
CASE
WHEN t3.date > t1.date AND t3.item_id = t1.item_id THEN t3.date
ELSE t1.date
END DESC
如果要按两个日期的最大值排序。但是,我不确定你的子查询会做你期望的事情;除非用户创建的项目总是在table_two中,无论他们是否有用它们
答案 1 :(得分:0)
请尝试使用order by子句:
ORDER BY
COALESCE(t3.date,t1.date) DESC;
以上查询可以帮助您订购您的要求,尽管您有机会调整您的SQL。