我有一张桌子,里面有产品。
该表有一个companyId字段。
让我们这样描述它:

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

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

我怎样才能做到?

最佳答案

您可以使用MySQL user defined variables

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

See Demo
说明:
首先根据companyId对数据进行排序,以便使相同的公司id粘在一起。
现在沿着这个排序的结果走一走,并在每次看到相同的companyId时指定一个顺序递增的行号,否则将1指定为row number
现在命名这个排序的结果(带有行号)t
最后根据升序行号和升序对这些数据(t)进行排序。

关于mysql - MySQL从表循环中按字段选择记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39685966/

10-13 07:52
查看更多