最近のmysqlで、ASで作ったエイリアス名に1重引用符を付けてORDER BY指定したときの動作が変わりました。
DBサーバを移行してmysqlのバージョンを新しくしたら、PHPコード内のSQL動作結果が変わっていてびっくりしました。
具体例は以下、
SQL:
-
$ mysql -u root mysql # mysql-server: 5.0.27
-
mysql> SELECT COUNT(*) AS cnt FROM user
-
mysql> GROUP BY User ORDER BY cnt DESC;
-
+-----+
-
| cnt |
-
+-----+
-
| 4 |
-
| 1 |
-
+-----+
-
2 rows IN SET (0.00 sec)
-
-
mysql> SELECT COUNT(*) AS cnt FROM user
-
mysql> GROUP BY User ORDER BY 'cnt' DESC;
-
+-----+
-
| cnt |
-
+-----+
-
| 4 |
-
| 1 |
-
+-----+
-
2 rows IN SET (0.00 sec)
-
-- cntも'cnt'も同じ動作
SQL:
-
$ mysql -u root mysql # mysql-server: 5.0.45
-
mysql> SELECT COUNT(*) AS cnt FROM user
-
mysql> GROUP BY User ORDER BY cnt DESC;
-
+-----+
-
| cnt |
-
+-----+
-
| 4 |
-
| 1 |
-
+-----+
-
2 rows IN SET (0.00 sec)
-
-
mysql> SELECT COUNT(*) AS cnt FROM user
-
mysql> GROUP BY User ORDER BY 'cnt' DESC;
-
+-----+
-
| cnt |
-
+-----+
-
| 1 |
-
| 4 |
-
+-----+
-
2 rows IN SET (0.00 sec)
-
-- cntと'cnt'で違う動作
ORDER BY 'cnt'の 'cnt'部分を文字列リテラルとみなすか、識別子とみなすかの差ですね。

