【发布时间】:2015-01-18 03:57:13
【问题描述】:
- 我有两张桌子。
- 它们都有 date 和 item_id 列。
- 我在 item_id 上加入了他们。
- 结果应按两个日期列一起排序
- 以下代码有效,生成正确的结果集...
- 但它们仅按第一个表的日期排序
代码
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)
任何帮助将不胜感激。 (而且我一定会标记答案!)
【问题讨论】:
-
你能用样本数据预期输出编辑问题吗?
-
添加了示例表。
-
你可以使用
SPROC吗?我的意思是它有很长的路要走,但是您可以从一个表中插入值,然后从另一个表中插入值,以便它们按表日期排序。 -
现在更加混乱了。期望的结果和当前的结果不仅顺序完全矛盾。
-
我已经回去重做表格了。让我知道这是否更好。
标签: mysql sql subquery sql-order-by multiple-columns