2013-02-20 69 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