MySQL查询根据另一个字段枚举行

时间:2013-02-20 09:31:09

标签: mysql field rows enumerate

我有这个结构:

table1    table2
id_t1     id_t2
id_t2

现在,我需要枚举table2中的行,但需要在单个查询中枚举id_t2。

输出示例:

ennum  id_t1  id_t2
1      1      1
2      2      1
3      3      1
1      4      2
2      5      2
4      6      1

导致使用每个id_t2的独占索引枚举的行。

我知道我必须使用变量(比如@ennum)并且我能够在全局范围内枚举它们,但我还没有找到正确的方法来实现它。

提前致谢。

2 个答案:

答案 0 :(得分:0)

尝试一下,

SELECT  g.ennum, 
        g.id_t1,
        g.id_t2
FROM 
    (
        SELECT  t.id_t1,
                t.id_t2,
                @running1:=if(@previous1=concat(t.id_t2),@running1,0) + 1 as ennum  ,
                @previous1:=concat(t.id_t2) 
        FROM TableName t
     )  g
ORDER BY ID_T2, ennum

答案 1 :(得分:0)

好的,谢谢@JW。我想我明白了:

为了在phpmyadmin中工作:

  1. 之前需要将变量 running1 previous1 设置为0。
  2. 嵌套查询必须按 idt2 排序,好像不能正确更新正在运行的索引。
  3. 结果是:

    SET @running1:=0;
    SET @previous1:=0;
    SELECT  g.ennum, 
        g.id_t1,
        g.id_t2
    FROM 
        (
            SELECT  t.id_t1,
                    t.id_t2,
                    @running1:=if(@previous1=concat(t.id_t2),@running1,0) + 1 as ennum  ,
                    @previous1:=concat(t.id_t2) 
            FROM TableName t
            ORDER BY id_t2
        ) AS g
    ORDER BY id_t2, ennum