2017-05-31 3 views
0

与えられたクエリのフィールド値あたりの行数を制限しようとしています。私は、次の表を作成した、リンクの最初の答えのようにフィールド値あたりの行数を数えて制限することはできません

here

create table mytab (
    id int not null auto_increment primary key, 
    first_column int, 
    second_column int 
) engine = myisam; 

は、このデータを挿入:

insert into mytab (first_column,second_column) values 
    (1,1), 
    (1,4), 
    (2,10), 
    (3,4), 
    (1,4), 
    (2,5), 
    (1,6); 
私はこの質問に答え見つけました

最後にこのクエリを実行します。

select 
    id, 
    first_column, 
    second_column, 
    row_num 
from 
    (select 
     *, 
     @num := if(@first_column = first_column, @num + 1, 1) as row_num, 
     @first_column:=first_column as c 
    from mytab 
    order by first_column,id) as t, 
    (select @first_column:='',@num:=0) as r; 

しかし、その代わりに、この結果を得るための、どこROW_NUM増加FIRST_COLUMNが繰り返されるたびに、

+----+--------------+---------------+---------+ 
| id | first_column | second_column | row_num | 
+----+--------------+---------------+---------+ 
| 1 |   1 |    1 |  1 | 
| 2 |   1 |    4 |  2 | 
| 5 |   1 |    4 |  3 | 
| 7 |   1 |    6 |  4 | 
| 3 |   2 |   10 |  1 | 
| 6 |   2 |    5 |  2 | 
| 4 |   3 |    4 |  1 | 
+----+--------------+---------------+---------+ 

私はこの結果を得る:

+----+--------------+---------------+---------+ 
| id | first_column | second_column | row_num | 
+----+--------------+---------------+---------+ 
| 1 |   1 |    1 |  1 | 
| 2 |   1 |    4 |  1 | 
| 5 |   1 |    4 |  1 | 
| 7 |   1 |    6 |  1 | 
| 3 |   2 |   10 |  1 | 
| 6 |   2 |    5 |  1 | 
| 4 |   3 |    4 |  1 | 
+----+--------------+---------------+---------+ 

私は文字通りのリンクからコードをコピーしました。私はSQL Fiddleをチェックし、コードは正常に動作します。私はXAMPPを使用しています。それが理由だろうか?そうであれば、上記のようなものを得るための回避策はありますか?

本当にありがとうございました。前もって感謝します。

答えて

1

変数の割り当てはサブクエリにある必要があります。

select 
    id, 
    first_column, 
    second_column, 
    row_num 
from 
    (select 
     m.*, 
     @num := if(@first_column = first_column, @num + 1, 1) as row_num, 
     @first_column:=first_column as c 
    from mytab m 
    cross join (select @first_column:='',@num:=0) r --this was in the outer query previously 
    order by first_column,id 
    ) t 
+0

心から感謝する。私がコピーしたコードがSQL Fiddleで動作するように見えるということは、私がまだ困惑しています。いずれにせよ、ありがとう! – jzeta

関連する問題