Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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
Mysql按字段从表循环中选择记录_Mysql_Sql - Fatal编程技术网

Mysql按字段从表循环中选择记录

Mysql按字段从表循环中选择记录,mysql,sql,Mysql,Sql,我有一张摆放商品的桌子。 该表有一个companyId字段。 让我们这样描述它: id --- companyId 1 | 2 2 | 3 3 | 4 4 | 2 5 | 3 6 | 1 7 | 4 我想选择所有按companyId排序但公司id循环的记录,如下所示: id --- companyId 6 | 1 1 |

我有一张摆放商品的桌子。 该表有一个companyId字段。 让我们这样描述它:

id --- companyId
 1   |    2     
 2   |    3     
 3   |    4     
 4   |    2     
 5   |    3     
 6   |    1
 7   |    4     
我想选择所有按companyId排序但公司id循环的记录,如下所示:

id --- companyId
 6   |    1     
 1   |    2     
 2   |    3     
 3   |    4     
 4   |    2     
 5   |    3   
 7   |    4

如何实现它?

您可以使用
MySQL用户定义变量实现这一点

SELECT 
t.id,
t.companyId
FROM 
(
    SELECT
    *,
    IF(@sameCompany = companyId , @rn := @rn + 1,
        IF(@sameCompany := companyId, @rn := 1,@rn := 1)
    ) AS rn
    FROM companytable
    CROSS JOIN (SELECT @sameCompany := -1, @rn := 1) AS var 
    ORDER BY companyId 
) AS t
ORDER BY t.rn , t.companyId


说明:

首先根据
companyId
对数据进行排序,以便相同的公司ID粘在一起

现在沿着这个排序结果走一走,每次看到相同的
companyId
时,按顺序分配一个递增的行号,否则将
1
分配为
行号

现在将这个排序结果命名为(行号)
t


最后,根据升序行号和升序公司ID对这些数据进行排序(
t
),您可以使用
MySQL用户定义变量来实现这一点

SELECT 
t.id,
t.companyId
FROM 
(
    SELECT
    *,
    IF(@sameCompany = companyId , @rn := @rn + 1,
        IF(@sameCompany := companyId, @rn := 1,@rn := 1)
    ) AS rn
    FROM companytable
    CROSS JOIN (SELECT @sameCompany := -1, @rn := 1) AS var 
    ORDER BY companyId 
) AS t
ORDER BY t.rn , t.companyId


说明:

首先根据
companyId
对数据进行排序,以便相同的公司ID粘在一起

现在沿着这个排序结果走一走,每次看到相同的
companyId
时,按顺序分配一个递增的行号,否则将
1
分配为
行号

现在将这个排序结果命名为(行号)
t


最后,根据升序行号和升序公司id对这些数据(
t
)进行排序。您有多个公司id。应该是什么样的?您有多个公司id。应该是什么样的?