通过忽略第二个标准来排序

时间:2013-08-07 05:19:31

标签: mysql sql

我的查询出现问题,基本上我在这里要做的就是首先订购

  

item_info.content_time desc

然后通过

  

item_views.views desc

我的目的是获取最新的项目(按item_info.content_time desc排序),观看次数最多(item_views.views desc)。本质上就像stackoverflow主页,你有最新的视图(我真的不知道他们是怎么做的)。以下查询按一个条件或另一个条件对项目进行排序(如果按标准反转顺序)。这是我的代码:

SELECT item_info.item_id, item_info.profile_id, item_info.tittle, item_covers.reference, usuarios.username, item_views.views
FROM item_info
LEFT JOIN item_covers ON item_covers.cover_id = item_info.book_id
LEFT JOIN usuarios ON item_info.profile_id = usuarios.id
LEFT JOIN item_views ON item_views.id = item_info.book_id
WHERE item_info.content_time
BETWEEN UNIX_TIMESTAMP( CURDATE( ) + INTERVAL -1
DAY )
AND UNIX_TIMESTAMP( CURDATE( ) + INTERVAL 1
DAY ) 
order by item_info.content_time desc, item_views.views desc

大致类似......

预期产出:

content_time |视图

17:00 500
13:00 300
11:00 100
10:00 50

实际输出:

content_time |视图

17:00 500
16:00 10
15:00 30
14:00 50

2 个答案:

答案 0 :(得分:1)

如果你想要两者的组合,你应该创建一个由DATEDIFF(content_time,NOW())+views之类的组合(可能由一个额外因子加权)组合而成的列。通过使用DATEDIFF,您将确保content_time是数字类型,并且可以添加到views。通过使用显示顺序中的参数DATEDIFF(),您将获得过去任何content_time的负数,这会相应地减少views的合并值。

所以你的查询应该以这样的结尾

结束
..
...
ORDER BY DATEDIFF(viewsitem_info.content_time,NOW())+viewsitem_info.views desc

DATEDIFF()给出了天数的差异。也许你想要更准确一点。在这种情况下,您可能希望改为使用TIMESTAMPDIFF(MINUTE,viewsitem_info.content_time,NOW())

@Aaron:您根本不需要更改数据结构。如有必要,您应该引入某种称量因子,如

ORDER BY 
(0.123* TIMESTAMPDIFF(MINUTE,viewsitem_info.content_time,NOW()) 
      + viewsitem_info.view) DESC

答案 1 :(得分:0)

编写您的查询,如下所示

SELECT item_info.item_id, item_info.profile_id, item_info.tittle, item_covers.reference,
usuarios.username, item_views.views FROM item_info
LEFT JOIN item_covers ON item_covers.cover_id = item_info.book_id
LEFT JOIN usuarios ON item_info.profile_id = usuarios.id
LEFT JOIN item_views ON item_views.id = item_info.book_id
WHERE item_info.content_time
BETWEEN UNIX_TIMESTAMP( CURDATE( ) + INTERVAL -1DAY )
    AND UNIX_TIMESTAMP( CURDATE( ) + INTERVAL 1
 DAY ) 
order by item_info.content_time,item_views.views desc

我认为它会起作用。

相关问题