2013-02-20 70 views
1

行我有这样的结构:MySQL查询枚举取决于另一场

 
table1 table2 
id_t1  id_t2 
id_t2 

现在,我需要表2中,但通过在单个查询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),我已经能够枚举它们全局,但我还没有找到正确的方法来做到这一点呢。

在此先感谢。

+0

您的例子似乎并没有包含必要得到输出的所有数据。你能为这个例子提供更多的输入数据吗?基本上,什么是输入和什么是预期的输出 – mvp 2013-02-20 09:36:04

+0

对于我公布的输出,所需的输入将简单地为: (id_t1,id_t2): (1,1),(2,1),(3,1), (4,2),(5,2),(6,1) – j4nSolo 2013-02-20 11:38:34

回答

0

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

对于这个在phpMyAdmin工作:

  1. 有必要设置变量running1上一页到0之前。
  2. 嵌套查询必须按idt2进行排序,好像不是它不会正确更新正在运行的索引。

结果是:

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 
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 
+0

虽然这在SQLFiddle上按预期工作,但我已经在phpmyadmin中运行了它,并且它为每一行输出enum = 1 ... 这是正确的方向。 – j4nSolo 2013-02-20 11:43:42

+0

我想我想出了一个解决方案,谢谢你。我会尽快发布。 无论如何,我找不到您使用的CONCAT的必要性。你能解释我的目的是什么吗? – j4nSolo 2013-02-20 13:50:00