Php mysql查询-如何创建此查询?

Php mysql查询-如何创建此查询?,php,mysql,Php,Mysql,我在创建查询时遇到问题 假设我在一个表中有这个数据:字段ID: 1020300300607020 我需要显示所有结果,但这样做: 10203006070200 如您所见,我对它们进行了排序,但它必须只接受唯一的值,直到没有更多值为止,然后应用相同的过滤器添加左边的值。。。只有唯一的。。。直到在数据库上显示所有结果为止 有什么想法吗? 谢谢您尝试一下,查询应该首先对值为1的所有行排序,然后是值为2的行,依此类推 SET @prev_value = NULL; SET @rank_count = 0

我在创建查询时遇到问题

假设我在一个表中有这个数据:字段ID:

1020300300607020

我需要显示所有结果,但这样做:

10203006070200

如您所见,我对它们进行了排序,但它必须只接受唯一的值,直到没有更多值为止,然后应用相同的过滤器添加左边的值。。。只有唯一的。。。直到在数据库上显示所有结果为止

有什么想法吗?
谢谢您尝试一下,查询应该首先对值为1的所有行排序,然后是值为2的行,依此类推

SET @prev_value = NULL;
SET @rank_count = 0;

SELECT id, rank_column, CASE
    WHEN @prev_value = rank_column THEN @rank_count
    WHEN @prev_value := rank_column THEN @rank_count := @rank_count + 1
END AS rank
FROM rank_table
ORDER BY rank_column

尝试这样做,查询应该首先对值为1的所有行排序,然后是值为2的行,依此类推

SET @prev_value = NULL;
SET @rank_count = 0;

SELECT id, rank_column, CASE
    WHEN @prev_value = rank_column THEN @rank_count
    WHEN @prev_value := rank_column THEN @rank_count := @rank_count + 1
END AS rank
FROM rank_table
ORDER BY rank_column

为id添加序列号,按序列号和id排序

SELECT id
FROM
(
    SELECT id, @cnt := IF(id = @id, @cnt + 1, 1), @id := id, @cnt AS cnt
    FROM 
    (
        SELECT id
        FROM table1
        ORDER BY id
    ) sub1
    CROSS JOIN (SELECT @cnt := 0, @id := 0) sub0
) sub2
ORDER BY cnt, id

为id添加序列号,按序列号和id排序

SELECT id
FROM
(
    SELECT id, @cnt := IF(id = @id, @cnt + 1, 1), @id := id, @cnt AS cnt
    FROM 
    (
        SELECT id
        FROM table1
        ORDER BY id
    ) sub1
    CROSS JOIN (SELECT @cnt := 0, @id := 0) sub0
) sub2
ORDER BY cnt, id

从MySQL 8.0开始,您可以使用
ROW\u NUMBER

CREATE TABLE tab(col INT);
INSERT INTO tab(col)
VALUES (10),(20), (30), (40), (30), (20),  (60), (70), (20);

SELECT t.col
FROM tab t
ORDER BY ROW_NUMBER() OVER (PARTITION BY col ORDER BY col), t.col;

输出:

┌─────┐
│ col │
├─────┤
│  10 │
│  20 │
│  30 │
│  40 │
│  60 │
│  70 │
│  20 │
│  30 │
│  20 │
└─────┘

从MySQL 8.0开始,您可以使用
ROW\u NUMBER

CREATE TABLE tab(col INT);
INSERT INTO tab(col)
VALUES (10),(20), (30), (40), (30), (20),  (60), (70), (20);

SELECT t.col
FROM tab t
ORDER BY ROW_NUMBER() OVER (PARTITION BY col ORDER BY col), t.col;

输出:

┌─────┐
│ col │
├─────┤
│  10 │
│  20 │
│  30 │
│  40 │
│  60 │
│  70 │
│  20 │
│  30 │
│  20 │
└─────┘

嗯。。您是否尝试过按ASC订购?我想我的问题是:你试过什么吗?非常简单地使用
行数
。请随意翻译到MySQLI,我已经尝试了所有我知道的@CodeGodie。分组依据:仅接受唯一值。如果我用两个字段分组,那么我得到所有的值,但“排序”了它们,所以我一个接一个地得到重复的10,20,20,30,30,40,60,70@lad2025谢谢,看起来很有趣。我将尝试应用此命令。@shotgunnika Done;)嗯。。您是否尝试过按ASC订购?我想我的问题是:你试过什么吗?非常简单地使用
行数
。请随意翻译到MySQLI,我已经尝试了所有我知道的@CodeGodie。分组依据:仅接受唯一值。如果我用两个字段分组,那么我得到所有的值,但“排序”了它们,所以我一个接一个地得到重复的10,20,20,30,30,40,60,70@lad2025谢谢,看起来很有趣。我将尝试应用此命令。@shotgunnika Done;)谢谢,这正是我需要的。它按预期工作。标记为正确答案。谢谢,这正是我需要的。它按预期工作。标记为正确答案的。