0

以下のレコードを持つテーブル purchase_order_product (MyISAM) に対して、MySQL 5.5.30 を使用します。

+----------+------------------+
| order_id | order_product_id |
+----------+------------------+
|       98 |                1 |
|       99 |               14 |
|       99 |               15 |
|      100 |               16 |
|      100 |               17 |
|      100 |               18 |
|      101 |               19 |
|      102 |               20 |
+----------+------------------+

MySQL Workbench 5.2.47 CE から次のクエリを実行すると:

SELECT pop.order_id, pop.order_product_id,
   @RUNNING:=IF(@PREVIOUS = pop.order_id, @RUNNING, 0) + 1 AS rownum,
   @PREVIOUS:=pop.order_id as previd
FROM purchase_order_product pop
ORDER BY pop.order_id , pop.order_product_id ASC;

次の出力が得られます。

+----------+------------------+--------+--------+
| order_id | order_product_id | rownum | previd |
+----------+------------------+--------+--------+
|       98 |                1 |      1 |     98 |
|       99 |               14 |      1 |     99 |
|       99 |               15 |      2 |     99 |
|      100 |               16 |      1 |    100 |
|      100 |               17 |      2 |    100 |
|      100 |               18 |      3 |    100 |
|      101 |               19 |      1 |    101 |
|      102 |               20 |      1 |    102 |
+----------+------------------+--------+--------+

私の望む目標はrownumの値です。これは問題なく、これまでのところ期待どおりです...

ただし、PHPコード内からクエリを実行するか、同じdbユーザーを使用して同じデータベースに対してmysqlコマンドラインからクエリを実行すると、次の出力が得られます。

+----------+------------------+--------+--------+
| order_id | order_product_id | rownum | previd |
+----------+------------------+--------+--------+
|       98 |                1 |      1 |     98 |
|       99 |               14 |      1 |     99 |
|       99 |               15 |      1 |     99 |
|      100 |               16 |      1 |    100 |
|      100 |               17 |      1 |    100 |
|      100 |               18 |      1 |    100 |
|      101 |               19 |      1 |    101 |
|      102 |               20 |      1 |    102 |
+----------+------------------+--------+--------+

ご覧のとおり、rownum は常に 1 です。

この厄介な問題の解決策を広範囲に探しましたが、役に立ちませんでした。何が起こっているのか誰にも分かりませんか?私は何か間違ったことをしていますか?

4

1 に答える 1

2

変数を初期化する必要があります。

 SET @RUNNING:=0;
 SET @PREVIOUS:=0;

これは、クエリの前に同じ mysql セッションで実行する必要があります。

于 2013-07-02T05:48:07.870 に答える