作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
Products
-- id [int]
-- name [string]
-- views [int]
是否可以编写一个查询,返回按一个或多个字段(例如浏览次数和 ID)排序的产品
,并使每第 3 个项目完全随机?
大意是我有一些产品:
+----+-----------+-------+
| id | name | views |
+----+-----------+-------+
| 1 | Product 1 | 12 |
| 2 | Product 2 | 65 |
| 3 | Product 3 | 23 |
| 4 | Product 4 | 23 |
| 5 | Product 5 | 32 |
| 6 | Product 6 | 76 |
| 7 | Product 7 | 35 |
| 8 | Product 8 | 91 |
| 9 | Product 9 | 73 |
+----+-----------+-------+
我想展示最受欢迎的产品,所以我想按浏览量排序。但是,不受欢迎的产品如果没有足够的牵引力,将无法与其他产品竞争。如果我能偶尔展示一些流行产品中的冷门产品,让它们也流行起来,那就太好了。
数据库:我将使用 graphql 和 mysql,但任何解决方案都会有所帮助
项目总数: 千
页数:每页 9 - 18
重要的是我只需创建一次数据库结构。可以设置有助于排序的任何其他列(属性)。只有 views
的数量会随时间变化。
最佳答案
好吧,这个请求很可怕,但它应该给你你所期望的
MySQL 5.6 架构设置:
查询 1:
SELECT *
FROM (
SELECT *
FROM T
ORDER BY `VIEWS` DESC
LIMIT 2
) A
UNION ALL
SELECT *
FROM (
SELECT *
FROM T T0
WHERE NOT EXISTS (
SELECT 1
FROM (
SELECT ID
FROM T
ORDER BY `VIEWS` DESC
LIMIT 2
) T1
WHERE T1.ID = T0.ID
)
ORDER BY RAND()
LIMIT 1
) B
Results :
| id | name | views |
|----|-----------|-------|
| 8 | Product 8 | 91 |
| 6 | Product 6 | 76 |
| 3 | Product 3 | 23 |
关于mysql - 选择所有 ORDER BY View 并使每 3 个项目随机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49201960/
我是一名优秀的程序员,十分优秀!