在 amazon.com 中,用户可以立即按“新品和畅销品”对产品进行排序。
我有一个“项目”表,其中包含每个项目的“上传日期”列和“视图”列。如何结合上传日期和浏览量按“新品和畅销品”对商品进行排序?
如何修改此查询以结合上传日期和视图以将项目获取为“新品和畅销品”?
select * from items order by uploaddate desc, views desc
我能想到的三种方法都可能是有效的方法。
1)将查询限制在最近 7 天(或者您定义“新”),并仅按视图排序。这只会向您显示新项目,但它是最简单的。
2) 添加一个字段,该字段对应于添加项目的几周前,并使用 CASE 语句确定。就像SELECT CASE(WHEN DATEDIFF(CURDATE()-uploaddate) < 7 THEN 1 ELSE 0 END AS relative week
然后按周排序。
3)就像你建议的那样,作为选择语句的一部分,使用公式根据视图和上传日期字段生成排名数字,然后按此排序。这更加困难,因为理想情况下,您希望您的排名基于最大观看次数并严重惩罚旧商品,这样您就不会在“新品和畅销”图表顶部拥有 2 年前非常受欢迎的商品。
我会做两个 SELECT 语句,一个按上传日期排序,一个按视图排序,然后使用 UNION 合并它们,然后用另一个 SELECT 语句包装它们并将它们分组以防止重复。