- ベストアンサー
MySQLデータベースからMAX値を取得できないエラー
- MySQLデータベースからMAX値を取得する際にエラーが発生しています。
- getSelect関数を使用してmax(key)を取得しているが、エラーとなる。
- 他の構文では問題なく動作するが、MAXやAVGなどの集計関数がうまく動作しない。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1の別名、#2の予約語の両方を反映しましたか? 式の結果を参照する場合、一般的には別名を付けて参照します。 式 [[as] 別名] といった指定方法になります。 今回の場合は、例えば別名を列と同じ key という名前にしたいなら select max(`key`) as `key` from ・・・ というように、別名を付けましたか? 表名、列名、それらの別名が、予約語と被っていたり、特殊記号を使う場合などで、MySQLでは「`」(バッククォート)で囲みます。
その他の回答 (2)
- chukenkenkou
- ベストアンサー率43% (833/1926)
key は予約語なので、`key` のように「`」(バッククォート)で囲んでください。 http://dev.mysql.com/doc/refman/5.1/ja/reserved-words.html
お礼
ありがとうございます。 keyが予約語とは知りませんでした。 しかし、`でも'でも囲んでみたのですが、 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in とでます。
- yambejp
- ベストアンサー率51% (3827/7415)
$result[result]=mysql_query($query,$this->connect); を $result[result]=mysql_query($query,$this->connect) or die(mysql_error()); としてデバッグしてみてください また、"max(key)"を投げているけど"max(key) AS max"などと しないと名前でアクセスできないでしょ?
お礼
ありがとうございます。 >"max(key) AS max"などとしないと名前でアクセスできないでしょ? はい、最初は付けていたのですが、とりあえず何が悪いか分からなかったので、削って削ってとりあえずエラーの原因を探してました (削ってエラーが出なかったら削った部分に原因ありで、出たら別のところかなと) で、ご指摘頂いたコードを追加してみたところ次のようなエラーとなりました。(下はAS maxを追加したコードです) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'key) AS max from main' at line 1 意味がよく分かりません。 AS maxを省略した形で実行すると 'key) AS max from main'のところが'key) from main'となっていただけです 記述とversionがあわないといっているのでしょうか?よくわかりません。 現在のサーバーはMySQL5.0.51aです。
お礼
何度もおつきあいありがとうございました。 何とかご指摘のところの修正で解決に至りました。 keyが予約語とは知りませんでした 大変お世話になりました。 やっと前へ進めます。