gpt4 book ai didi

MySQL 奇怪的排序要求

转载 作者:行者123 更新时间:2023-11-29 07:04:30 25 4
gpt4 key购买 nike

我有一个像这样的 MySQL 查询:

SELECT
id,
CASE
WHEN (cond1) THEN 1
WHEN (cond2) THEN 2
WHEN (cond3) THEN 3
END `rank`
FROM `table`

有没有办法对它进行排序,以便我得到的结果具有以下交替顺序:

rank
1
2
3
1
2
3

1、2 和 3 的顺序无关紧要,只要它们遵循模式 123123[...]。它可以是它们输入数据库的顺序,也可以是随机的。

我有一个由三种类型的项目组成的数据库,它们可以重复。

rock      1
paper 2
scissors 3
rock 1
rock 1
rock 1
scissors 3
paper 2

我想做的是让他们拿石头剪刀布,石头剪刀布,只要能拿到就拿。

我这样做是因为我的大部分数据 (> 90%) 都是剪刀,当我用分页显示我的数据时,第一页 (LIMIT 0, N) 都是剪刀。由于占多数,即使 ORDER BY RAND() 也无济于事,所以这就是原因。

最佳答案

修改自 Stackoverflow 中类似问题的答案:

SELECT name, cond
FROM (
SELECT name, cond, @a := @a+1 AS inc
FROM table, ( select @a := 0 ) as SqlVars
WHERE cond = 1
UNION
SELECT name, cond, @b := @b+1 AS inc
FROM table, ( select @b := 0 ) as SqlVars
WHERE cond = 2
UNION
SELECT name, cond, @c := @c+1 AS inc
FROM table, ( select @c := 0 ) as SqlVars
WHERE cond = 3
)
ORDER BY inc

它仅限于有限的少数条件。如果条件不固定限制小那么你应该去程序。而且它也不是最佳查询。

另一种方法是在数据库中添加一个新字段,并注意在那里插入一个 goog 值(相同条件的 MAX + 1),以便使用该列进行排序。

关于MySQL 奇怪的排序要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8167120/

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