Products
-- id [int]
-- name [string]
-- views [int]
是否可以编写一个返回products
一个或多个字段排序的查询(例如视图和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
的数量会随着时间的推移而发生变化。
答案 0 :(得分:2)
好的,这个请求很可怕,但它应该能满足你的期望
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 |