Mysql 如何在3组之间旋转数据?
假设我有A组、B组和C组,每组有X个项目。使用的算法是什么,这样我就可以把这里的所有项目分类,每次我都从每组中取一个 即。 假设A和B有2项,C有3项。我应该显示如下列表: 我正在从MySQL数据库中提取这些数据,所以如果在MySQL中能够做到这一点,我将不胜感激 那么什么是好的算法呢?我想这是很多事情的常见场景,所以应该已经有了一些有效的方法来做到这一点。我不知道谷歌搜索是为了什么,我没有得到任何好的结果Mysql 如何在3组之间旋转数据?,mysql,algorithm,sorting,Mysql,Algorithm,Sorting,假设我有A组、B组和C组,每组有X个项目。使用的算法是什么,这样我就可以把这里的所有项目分类,每次我都从每组中取一个 即。 假设A和B有2项,C有3项。我应该显示如下列表: 我正在从MySQL数据库中提取这些数据,所以如果在MySQL中能够做到这一点,我将不胜感激 那么什么是好的算法呢?我想这是很多事情的常见场景,所以应该已经有了一些有效的方法来做到这一点。我不知道谷歌搜索是为了什么,我没有得到任何好的结果 有人想了解一下吗?您可以通过以下查询来完成此结果: [您可以在任何组之间旋转数据 SEL
有人想了解一下吗?您可以通过以下查询来完成此结果: [您可以在任何组之间旋转数据
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…)对排序后的数据进行排序
- 因此,同一类型下的项粘在一起,具有排序 他们之间有秩序
- 现在,假设您正在遍历这个双排序数据
- 如果您发现一个项目属于以前看到的项目类型,则 将为这个刚刚看到的项目分配一个递增的排名编号
- 否则,(这意味着您刚刚看到了属于新项目的项目 项目类型)您将分配一个等级编号,该编号为零
左连接
,这使得翻译有点困难。我添加了一个解释。请现在检查。这在左联接
或内部联接
时如何工作?左联接
或内部联接
在何种条件下与哪个表一起工作?请再解释一下。如果您想使用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