MySQL:如何在使用 parent 查询 "order by" 的同时 "order by" 子查询列?
MySQL: How to "order by" a subquery column while also using a parent query "order by"?
- 我有两个table。
- 它们都有日期和 item_id 列。
- 我在 item_id 加入了他们的行列。
- 结果应按两个日期列一起排序
- 下面的代码有效,产生了正确的结果集...
- 但是它们只按第一个table的日期
排序
代码
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
中的项目,尽管它们来自 table 和 subquery
table,它们有自己的日期列。我该怎么做?
我试过的:
我试过移动 t3.date
并订购 subquery
本身,但这不起作用。任何修改子查询的尝试都会改变结果集,我想不出另一种方法来编写它以获得相同的结果但顺序正确。我知道可能有更好的方法来编写此查询,但我也无法弄清楚。我很幸运这个作品!
附加信息:
第一个table是所有项目的索引,而第二个table是一个"favorites"table,只包含用户收藏的项目。使用 t1.item_id = t3.item_id OR t1.user_id IN(1,2,3)
,我实际上是在 t1 中获取由这些用户制作的项目或这些用户收藏的项目。
示例:
Table一个"Item Table":(日期是"date created")
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
Table两个"User Favorites":(日期是"date favorited")
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)
如有任何帮助,我们将不胜感激。 (我一定会标记答案的!)
尝试在 ORDER BY 中使用 CASE 语句 select 您想要的日期,因此:
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 中,无论他们是否收藏了它们
尝试按子句排序:
ORDER BY
COALESCE(t3.date,t1.date) DESC;
尽管您有机会调整 SQL。
,但上述查询可以帮助您订购您的要求
- 我有两个table。
- 它们都有日期和 item_id 列。
- 我在 item_id 加入了他们的行列。
- 结果应按两个日期列一起排序
- 下面的代码有效,产生了正确的结果集...
- 但是它们只按第一个table的日期 排序
代码
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
中的项目,尽管它们来自 table 和 subquery
table,它们有自己的日期列。我该怎么做?
我试过的:
我试过移动 t3.date
并订购 subquery
本身,但这不起作用。任何修改子查询的尝试都会改变结果集,我想不出另一种方法来编写它以获得相同的结果但顺序正确。我知道可能有更好的方法来编写此查询,但我也无法弄清楚。我很幸运这个作品!
附加信息:
第一个table是所有项目的索引,而第二个table是一个"favorites"table,只包含用户收藏的项目。使用 t1.item_id = t3.item_id OR t1.user_id IN(1,2,3)
,我实际上是在 t1 中获取由这些用户制作的项目或这些用户收藏的项目。
示例:
Table一个"Item Table":(日期是"date created")
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
Table两个"User Favorites":(日期是"date favorited")
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)
如有任何帮助,我们将不胜感激。 (我一定会标记答案的!)
尝试在 ORDER BY 中使用 CASE 语句 select 您想要的日期,因此:
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 中,无论他们是否收藏了它们
尝试按子句排序:
ORDER BY
COALESCE(t3.date,t1.date) DESC;
尽管您有机会调整 SQL。
,但上述查询可以帮助您订购您的要求