MySQLデータベースからMAX値を取得できないエラー

このQ&Aのポイント
  • MySQLデータベースからMAX値を取得する際にエラーが発生しています。
  • getSelect関数を使用してmax(key)を取得しているが、エラーとなる。
  • 他の構文では問題なく動作するが、MAXやAVGなどの集計関数がうまく動作しない。
回答を見る
  • ベストアンサー

MAX値が取得できない

次のような形でMySQLデータベースからデータを取得するように組んでいます mainテーブルのkeyフィールド(INT型)の最大値を取得したいと思っています。 function getResult($query){ $result[result]=mysql_query($query,$this->connect); $result[count]=@mysql_num_rows($result[result]); return $result; } function getSelect($field,$table,$where){ $query="select $field from $table $where;"; $result=$this->getResult($query); return $result; } これが別ファイルにあり、もちろん先に読み込ませ、データベースには接続した状態で、 $results=$db->getSelect("max(key)","main",""); $rows=mysql_fetch_array($results[result]); を実行したのですが、 mysql_fetch_array(): supplied argument is not a valid MySQL のエラーとなり、 'max(key)'とすると 最大値が取得できずそのままmax(key)という文字列が返るだけ max'(key)'とすると mysql_fetch_array(): supplied argument is not a valid MySQL のエラーがでます。 MAXなど大文字に変えても同じ結果です。 maxやavgは今回初めて使ってうまくいかないのですが、今までこの構文で通常のselect * fromとかorder by、limitなど他のものは何の問題もなく動きます。 どこをどうかえてやればMAXを取得できるでしょうか。

  • choei
  • お礼率63% (286/451)
  • PHP
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

#1の別名、#2の予約語の両方を反映しましたか? 式の結果を参照する場合、一般的には別名を付けて参照します。 式 [[as] 別名] といった指定方法になります。 今回の場合は、例えば別名を列と同じ key という名前にしたいなら select max(`key`) as `key` from ・・・ というように、別名を付けましたか? 表名、列名、それらの別名が、予約語と被っていたり、特殊記号を使う場合などで、MySQLでは「`」(バッククォート)で囲みます。

choei
質問者

お礼

何度もおつきあいありがとうございました。 何とかご指摘のところの修正で解決に至りました。 keyが予約語とは知りませんでした 大変お世話になりました。 やっと前へ進めます。

その他の回答 (2)

回答No.2

key は予約語なので、`key` のように「`」(バッククォート)で囲んでください。 http://dev.mysql.com/doc/refman/5.1/ja/reserved-words.html

choei
質問者

お礼

ありがとうございます。 keyが予約語とは知りませんでした。 しかし、`でも'でも囲んでみたのですが、 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in とでます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

$result[result]=mysql_query($query,$this->connect); を $result[result]=mysql_query($query,$this->connect) or die(mysql_error()); としてデバッグしてみてください また、"max(key)"を投げているけど"max(key) AS max"などと しないと名前でアクセスできないでしょ?

choei
質問者

お礼

ありがとうございます。 >"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です。

関連するQ&A

  • データベースから多次元連想配列でデータを取得できない

    PHP,MySQLともに初心者です いろんなサンプルプログラムを見て少しずつ進めているのですが、本3冊にネットで検索しても解決できないので・・・ function getSelect($field,$table,$where){ $query="select $field from $table $where;"; $result=$this->getResult($query); return $result; } $result=$db->getSelect("*","main","where myouji=$_POST[myouji]"); while($row = mysql_fetch_array($result[result])){ echo "$row[id]"; } こんな感じでmainテーブルからmyoujiに該当するrowを取得したのですが、 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in とエラーが出てしまいます。 他のところで、 $result=$db->getSelect("*","main","where id=$_POST[id]"); $rows=mysql_fetch_array($result[result]); としたときはエラーなく行くのですが、上のような多次元連想配列(下の方はidを重複させてないので必ずrowが1つ・・・1次元連想配列?)になるとエラーになってしまいます。 これはどう修正すればいいのでしょうか。 たったこれ1行のつまづきで4時間くらいかかってます。 誰か助けてください

    • ベストアンサー
    • PHP
  • フォームとPHPの連携

    こんにちは。今回、オプションメニューのフォームを作り、選択したオプションごとにデータを表示させるというものを作っているのですが、オプションを選択し、実行すると、 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in~ Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in~ と表示されてしまいます。 フォームを用いずに単にデータを表示させるだけならできたのですが・・・ フォームとPHPを連携させる場合、php.ini内のregister_globalsをOnにする必要があるとのことだったので、Onにはしているのですが・・・ 問題はほかにあるのでしょうか?よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 最大値を取得できない

    最大値を取得して、一意の番号を付加するルーチンです。 最大値を取得できなくて困っています。 // データを取得して表示 $query = "SELECT MAX(cid) FROM " . LB_TABLE_CAT; $result = @mysql_query($query, $db); $num_rows = @mysql_num_rows($result); if($num_rows > 0) { $row = @mysql_fetch_assoc($result); $cid = $row['cid']; $cidに値が入るはずですが、1と出力されます。 テーブル(LB_TABLE_CAT) cid name 1  あああ 2  いいい 3  ううう 100 えええ となっています。 想定では100が入るはずですが、どこがおかしいのでしょうか? phpmyadmin上では、ちゃんと100が出力されます。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • ホームページを製作していて、以下の表示がされます。

    ホームページを製作していて、以下の表示がされます。 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/users/0/lolipop.jp-4714bf268f410dba/web/contents/qa/qa.php on line 13 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/users/0/lolipop.jp-4714bf268f410dba/web/contents/qa/qa.php on line 18 ソース部分を表示してみると、 //-サブメニューテーブル--------------------------------------// $con = mysql_connect("mysql517.phy.lolipop.jp","LA05915237","kyoyutt"); mysql_select_db("LA05915237"); $sql="select * from submenu where id=1 "; $rs=mysql_query($sql); $row=mysql_fetch_array($rs);   ← この部分が、13行目 //-トップパーツテーブル--------------------------------------// $sql="select * from topparts where id=1 "; $rs=mysql_query($sql); $row1=mysql_fetch_array($rs);  ← この部分が、18行目 なにがおかしいのでしょうか? MySQL5なのですが、MySQL4の時には、上記エラーは出ないで動作しておりました。 教えてください。

  • 下記2エラーメッセージの意味は?

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/fprob.php on line 22 Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /home/fprob.php on line 98 また、こういったエラーメッセージが分かりやすく一覧になっているPHP初心者サイトがあれば教えて下さい

    • ベストアンサー
    • PHP
  • MySQLにつなぐことができない。

    PHPで、データベースからデータを取得しようとしたのですが、データベースもパスワードもデータも完璧なのに、以下のようなエラーが出てしまい、1週間不眠不休で調べましたが、全く解決できません。 <エラー> Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in C:\xampp\htdocs\merhen\data\index.php on line 98 Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\merhen\data\index.php on line 99 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\merhen\data\index.php on line 101 <コード> $sqli="select * from $news_table where order by id desc limit 5"; //SQLで引き抜いて変数に格納する if(($dbhi = mysql_connect($host,$database_user,$database_password)) != FALSE){ mysql_select_db($dbname) or die("Connect Error!"); $resi = mysql_query($dbhi,$sqli); $counti = mysql_num_rows($resi); エラーの意味は分かるんですが、全く解決策がわからないので、精魂尽き果ててしまいそうな状態です。 納期が明日ですので、すぐに回答がいただければと思います。 XAMPP1.6.3a及びPHP5.2を使用しています。

  • Warning: mysql_num_rows()

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in と、phpでエラーが出ます。調べた結果クエリに問題があるということです。 クエリは $query = "select name,jyusyo,kakaku,gazou,link from kensaku order by kakaku asc"; です。なにがおかしいのでしょうか??カカクカラムを昇順に呼び出したいのですが。。。

    • ベストアンサー
    • MySQL
  • 管理画面に入るときに出るエラー表示

    phpとmysqlで構築されたウェブサイトの管理画面に入るとき、下記のようなエラーが表示されます。 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ***/httpdocs/function/mysql.php ただ表示されるだけで運営上は問題なさそうなんですが、ログイン時のエラーだけにこのまま使ってもいいのかどうか悩んでいます。このまま使うのは何か問題あるのでしょうか。

    • ベストアンサー
    • MySQL
  • エスケープでエラーが出ます。

    $search_query = "select SQL_CALC_FOUND_ROWS * from king"; $usersearch= htmlentities($_GET['usersearch']); $clean_search = str_replace('、', ' ',$clean_search); $clean_search = str_replace(' ', ' ',$usersearch); $search_words = explode(' ', $clean_search); $final_search_words = array(); if (count($search_words) > 0) { foreach ($search_words as $word) { if (!empty($word)) { $final_search_words[] = $word; } } } // Generate a WHERE clause using all of the search keywords $where_list = array(); if (count($final_search_words) > 0) { foreach($final_search_words as $word) { $where_list[] = "syou LIKE '%$word%'"; } } $where_clause = implode(' AND ', $where_list); // Add the keyword WHERE clause to the search query if (!empty($where_clause)) { $search_query .= " WHERE $where_clause"; } $pid = intval($_GET['pid']); if ($pid < 1) $pid = 1; $limit_start_rows = ( $pid - 1 ) * 10; $search_query .= " LIMIT {$limit_start_rows}, 10"; $result = mysql_query($search_query); $num_rows_result = mysql_query("SELECT FOUND_ROWS()"); $num_rows = mysql_fetch_assoc($num_rows_result); $num_rows = $num_rows['FOUND_ROWS()']; if($num_rows== 0){ $message="該当データは見つかりませんでした。"; } else $message=$num_rows ."件該当しました<br/>"; echo $message; while($row = mysql_fetch_array($result) 2行目のhtmlentities()を外すと正常に動作しますが、この関数を付けるとエラーが出てしまいます。 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ドメイン 76です。ちなみに76は、ここに提示している最後のwhile~です、よろしくお願いします。

    • 締切済み
    • PHP
  • 値の受け渡しが出来ない。

    index.htmlのチェックボックスの内容をa.phpで受け取り、この値を更にb.phpに送りたいのですが Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/sites/heteml//web/b.php on line 56 該当データ無し Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/sites/heteml//web/b.php on line 64 と、なって上手くデータが渡っていません。 a.phpには <form action="b.php" method="POST"> <input type="hidden" name="jyusyo[]" value="<?php echo ($_POST['jyusyo']); ?>" /> <input type="submit" /> </form> として、b.phpに値が渡るようにしているはずなんですが。。

    • ベストアンサー
    • PHP

専門家に質問してみよう