Mysql 如何在3组之间旋转数据?

Mysql 如何在3组之间旋转数据?,mysql,algorithm,sorting,Mysql,Algorithm,Sorting,假设我有A组、B组和C组,每组有X个项目。使用的算法是什么,这样我就可以把这里的所有项目分类,每次我都从每组中取一个 即。 假设A和B有2项,C有3项。我应该显示如下列表: 我正在从MySQL数据库中提取这些数据,所以如果在MySQL中能够做到这一点,我将不胜感激 那么什么是好的算法呢?我想这是很多事情的常见场景,所以应该已经有了一些有效的方法来做到这一点。我不知道谷歌搜索是为了什么,我没有得到任何好的结果 有人想了解一下吗?您可以通过以下查询来完成此结果: [您可以在任何组之间旋转数据 SEL

假设我有A组、B组和C组,每组有X个项目。使用的算法是什么,这样我就可以把这里的所有项目分类,每次我都从每组中取一个

即。 假设A和B有2项,C有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 FIDLE

对该测试数据运行上述查询,您将得到如下输出:

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
说明:

  • 首先根据
    项目类型(A、B、C…)对数据进行排序
    ,然后 再次根据
    项目名称(项目1、项目2…)对排序后的数据进行排序
  • 因此,同一类型下的项粘在一起,具有排序 他们之间有秩序
  • 现在,假设您正在遍历这个排序数据
  • 如果您发现一个项目属于以前看到的项目类型,则 将为这个刚刚看到的项目分配一个递增的排名编号
  • 否则,(这意味着您刚刚看到了属于新项目的项目 项目类型)您将分配一个等级编号,该编号为零

IF在那里做什么?我有点困惑,因为我的实际查询包含一个
左连接
,这使得翻译有点困难。我添加了一个解释。请现在检查。这在
左联接
内部联接
时如何工作?
左联接
内部联接
在何种条件下与哪个表一起工作?请再解释一下。如果您想使用
itemsTable
进行join,那么可以在上面的查询中将join子句放在From itemsTable之后。像这样,
…从itemsTable内部将您的\u另一个\u表连接到您的\u另一个\u表。FIELD=itemsTable.FIELD,(选择@prev:=NULL,@rank:=0)vars…
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   item_name
   A          ITEM 1
   A          ITEM 2
   B          ITEM 1
   B          ITEM 2
   C          ITEM 1
   C          ITEM 2
   C          ITEM 3