Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL:在组内枚举(香蕉,1/香蕉,2/香蕉,3/苹果,1…)_Php_Mysql_Enumeration - Fatal编程技术网

Php MySQL:在组内枚举(香蕉,1/香蕉,2/香蕉,3/苹果,1…)

Php MySQL:在组内枚举(香蕉,1/香蕉,2/香蕉,3/苹果,1…),php,mysql,enumeration,Php,Mysql,Enumeration,我将一个查询分组。这是对具有版本的技术部件的查询 比如: 目标是执行一个结果如下的查询: GlobalID, Version, ID, Date 17, 1, Masterscrew, 413, 17.10.2014 17, 2, Masterscrew, 421, 28.10.2014 17, 3, Masterscrew B, 519, 01.12.2014 29, 1, Bluescrew, 482, 11.08.2014 is的挑战是版本列。我可以对MySQL施展魔法吗?这可以通过其中

我将一个查询分组。这是对具有版本的技术部件的查询

比如:

目标是执行一个结果如下的查询:

GlobalID, Version, ID, Date
17, 1, Masterscrew, 413, 17.10.2014
17, 2, Masterscrew, 421, 28.10.2014
17, 3, Masterscrew B, 519, 01.12.2014
29, 1, Bluescrew, 482, 11.08.2014

is的挑战是版本列。我可以对MySQL施展魔法吗?

这可以通过其中一个带有@ID变量的毛茸茸的查询来实现

SELECT (@ID := IF(@Prev <> GlobalID, 1, @ID + 1)) version,
       (@Prev := GlobalID) GlobalID, 
       Name, 
       ID, 
       STR_TO_DATE(DateCreated, '%d.%m.%Y') DateCreated
  FROM parts,
       ( SELECT @ID := 0, @Prev := 0 ) A
  ORDER BY GlobalID, ID

不要更改SELECT中前两列的顺序,否则查询将不再工作。这是一个可怕的MySQL攻击;其他RDM提供排名。

您需要使用GlobalID变量,比如@GlobalID,以便比较GlobalID是否有变化,然后将计数器重置为1,否则添加1,如:

SET @VERSION_NUM=0;
SET @PREV_GLOBALID=0;
SELECT
  ID,
IF(@PREV_GLOBALID!=GlobalID,@VERSION_NUM:=1, @VERSION_NUM:=@VERSION_NUM+1) as version,    
@PREV_GLOBALID:=GlobalID as GlobalID,
  name,
  DateCreated
FROM parts
ORDER BY GlobalID ASC, id ASC
 @Num := if(@GlobalID<>GlobalID,1,ifnull(@Num,0)+1) as Num
,@GlobalID := GlobalID
然后将其作为一个完整的子查询,稍后可以使用,如:

SELECT ID, GlobalID, Name, DateCreated as `Date`, 
  @Num := if(@GlobalID<>GlobalID,1,ifnull(@Num,0)+1) as Num
 ,@GlobalID := GlobalID
FROM tbl, (SELECT @Num:=0) A
ORDER BY GlobalID
使用函数连接字符串和数字,然后还使用前面的子查询,因此现在的完整查询如下所示:

 SELECT GlobalID, CONCAT(Num,', ',Name) as Version
  ,ID, `Date`
 FROM (
   SELECT ID, GlobalID, Name, DateCreated as `Date`, 
   @Num := if(@GlobalID<>GlobalID,1,ifnull(@Num,0)+1) as Num
   ,@GlobalID := GlobalID
   FROM tbl, (SELECT @Num:=0) A
 ORDER BY GlobalID ) t 

检查我的

否。这在任何可扩展的方面都不太可能。请分享您的查询好吗?我从来没有这样使用过MySQL。好主意。塔克斯。
SELECT ID, GlobalID, Name, DateCreated as `Date`, 
  @Num := if(@GlobalID<>GlobalID,1,ifnull(@Num,0)+1) as Num
 ,@GlobalID := GlobalID
FROM tbl, (SELECT @Num:=0) A
ORDER BY GlobalID
 SELECT GlobalID, CONCAT(Num,', ',Name) as Version
  ,ID, `Date`
 FROM (
   SELECT ID, GlobalID, Name, DateCreated as `Date`, 
   @Num := if(@GlobalID<>GlobalID,1,ifnull(@Num,0)+1) as Num
   ,@GlobalID := GlobalID
   FROM tbl, (SELECT @Num:=0) A
 ORDER BY GlobalID ) t