以下のレコードを持つテーブル 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 です。
この厄介な問題の解決策を広範囲に探しましたが、役に立ちませんでした。何が起こっているのか誰にも分かりませんか?私は何か間違ったことをしていますか?