MySQL:如何像亚马逊一样通过 "New and Bestselling"获取?

标签 mysql sorting

在 amazon.com 中,用户可以立即按“新品和畅销品”对产品进行排序。

我有一个“项目”表,其中包含每个项目的“上传日期”列和“ View ”列。如何结合上传日期和浏览次数按“新品和畅销品”对商品进行排序?

如何修改此查询以结合上传日期和 View 来获取“新品和畅销品”商品?

select * from items order by uploaddate desc, views desc

最佳答案

我可以立即想到三种方法,这些方法都可能是有效的方法。

1) 将查询限制为最近 7 天(或者您定义的"new")并仅按 View 排序。这只会向您显示新项目,但这是最简单的。

2) 添加一个字段,该字段对应于添加该项目的周数,并使用 CASE 语句确定该字段。喜欢SELECT CASE(WHEN DATEDIFF(CURDATE()-uploaddate) < 7 THEN 1 ELSE 0 END AS relative week然后按周排序。

3) 就像您建议的那样,作为 select 语句的一部分,使用公式根据 View 和上传日期字段生成排名数字,并按该排名数字排序。这更加困难,因为理想情况下,您希望您的排名根据最大浏览量进行扩展,并对较旧的商品进行严厉处罚,这样您就不会在“新品和畅销”图表的顶部看到 2 年前非常受欢迎的商品。

关于MySQL:如何像亚马逊一样通过 "New and Bestselling"获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10920686/

相关文章:

PHP 和 MySQL : Dynamic position/order update

algorithm - 如何通过运行时间来计算算法复杂度?

sorting - Elasticsearch脚本:嵌套日期可以作为日期对象直接访问吗?

oracle - 将 Oracle 上的结果排序为 ASCII

algorithm - 数基转换的时间复杂度

c - 冒泡排序链表

sql - mysql 将结果格式化为列而不是行

MySQL 显示值为 NULL 或 IN(2, 3) 的行

php - Safari 和 iPhone Safari 播放为 "live streaming",文件大小有限(MySQL、PHP)

php - 无法为 INT 类型保存空值(php、symfony)