gpt4 book ai didi

mysql - 选择所有 ORDER BY View 并使每 3 个项目随机

转载 作者:搜寻专家 更新时间:2023-10-30 22:27:39 25 4
gpt4 key购买 nike

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 的数量会随时间变化。

最佳答案

好吧,这个请求很可怕,但它应该给你你所期望的

SQL Fiddle

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com