gpt4 book ai didi

mysql - 如何在 3 组之间轮换数据?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:00:13 24 4
gpt4 key购买 nike

假设我有 A、B 和 C 组。每个组都有 X 个项目。使用的算法是什么,这样我就可以按照每次从每组中取出一个的方式来整理这里的所有项目。

即。鉴于 A 和 B 有 2 个项目,而 C 有 3 个。我应该显示这样的列表:

 1. A - Item 1
2. B - Item 1
3. C - Item 1
4. A - Item 2
5. B - Item 2
6. C - Item 2
7. C - Item 3

我正在从 MySQL 数据库中提取这些数据,所以如果可以在 MySQL 中执行此操作,我将不胜感激。

那么对此有什么好的算法呢?我想这将是一堆事情的常见场景,所以应该已经有一些有效的方法来做到这一点。虽然我不知道要谷歌什么,但我没有得到任何好的结果。

有人愿意对此有所了解吗?

最佳答案

您可以通过以下查询来完成这样的结果:

[实际上您可以在任何组之间轮换数据]

SELECT 
t.item_type,
t.item_name
FROM
(
SELECT
item_type,
item_name,
IF(@prev = item_type , @rank := @rank + 1 , @rank := 0) rankNumber,
@prev := item_type
FROM itemstable , (SELECT @prev := NULL, @rank := 0) vars
ORDER BY item_type,item_name
) t
ORDER BY t.rankNumber,t.item_type;

SQL FIDDLE DEMO


使用架构测试数据:

(如果您无法访问 SQL FIDDLE)

DROP TABLE IF EXISTS `itemstable`;
CREATE TABLE `itemstable` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`item_type` varchar(10) CHARACTER SET utf8 NOT NULL,
`item_name` varchar(50) CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`ID`)
);
INSERT INTO `itemstable` VALUES ('1', 'A', 'ITEM 1');
INSERT INTO `itemstable` VALUES ('2', 'A', 'ITEM 2');
INSERT INTO `itemstable` VALUES ('3', 'B', 'ITEM 1');
INSERT INTO `itemstable` VALUES ('4', 'B', 'ITEM 2');
INSERT INTO `itemstable` VALUES ('5', 'C', 'ITEM 1');
INSERT INTO `itemstable` VALUES ('6', 'C', 'ITEM 2');
INSERT INTO `itemstable` VALUES ('8', 'C', 'ITEM 3');

在此测试数据上运行上述查询,您将获得如下输出:

item_type     item_name
A ITEM 1
B ITEM 1
C ITEM 1
A ITEM 2
B ITEM 2
C ITEM 2
C ITEM 3

解释:

  • 首先根据 ITEM_TYPE (A,B,C...) 对数据进行排序,然后再次根据 ITEM_NAME (ITEM1,ITEM2...) 对已排序的数据进行排序。
 item_type   item_name
A ITEM 1
A ITEM 2
B ITEM 1
B ITEM 2
C ITEM 1
C ITEM 2
C ITEM 3
  • 以便同一类型下的项目粘在一起并进行排序在其中排序。
  • 现在假设您正在浏览这个双重排序的数据。
  • 如果您找到属于以前见过的 ITEM_TYPE 的项目,那么您将为这个刚刚看到的项目分配一个递增的排名编号。
  • 否则,(这意味着你刚刚看到了一个属于新的项目ITEM_TYPE) 您将分配一个为零的等级编号。

关于mysql - 如何在 3 组之间轮换数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37080186/

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