MySQL:如何在使用 parent 查询 "order by" 的同时 "order by" 子查询列?

MySQL: How to "order by" a subquery column while also using a parent query "order by"?

  1. 我有两个table。
  2. 它们都有日期和 item_id 列。
  3. 我在 item_id 加入了他们的行列。
  4. 结果应按两个日期列一起排序
  5. 下面的代码有效,产生了正确的结果集...
  6. 但是它们只按第一个table的日期
  7. 排序

代码

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。

,但上述查询可以帮助您订购您的要求