• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:WHERE句で一致しない場合を判断させる方法)

WHERE句で一致しない場合を判断させる方法

このQ&Aのポイント
  • WHERE句で一致しない場合を判断させる方法について質問があります。
  • $mysql_Codeで一致しない場合に特定の処理を行いたいがうまくいかないです。
  • 一部のフィールドが表示されない問題についても考察しています。

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

たとえば該当件数が1件だったら if(!mysql_fetch_array($mysql_Row)){ このときのmysql_fetch_arrayで読み込んでしまいますよね。なので while($row = mysql_fetch_array($mysql_Row)){ は最初からbreakしてしまいます。 最初のifをmysql_num_rowsが0かどうかのチェックに代えるとか、whileをdo~whileにするとか、mysql_data_seekなどでポインタを戻すとか、の対策が必要ですね。 が、個人的には最初でチェックする必要はないと思います。データ行がなければ$html_Codeは空白のままになりますから、最後でチェックしても問題ないでしょう? $html_Code = ""; while($row = mysql_fetch_array($mysql_Row)){ $id = $row["id"]; $name = $row["name"]; $kudamono = $row["kudamono"]; $coment = nl2br($row["coment"]); $html_Code .= "<tr><td>$id</td><td>$name</td><td>$kudamono</td><td>$coment</tr>\n"; } if ($html_Code == '') { $html_Code .= '<tr><td colspan="4">条件に一致する項目はありません。</td></tr>'; }

kiseki777
質問者

お礼

>最初のifをmysql_num_rowsが0かどうかのチェックに代えるとか、whileをdo~whileに >するとか、mysql_data_seekなどでポインタを戻すとか、の対策が必要ですね。 http://php.quus.net/array/prev.php 配列の位置をポインタといい、 それを戻すとは、キーが小さい方へ位置を移動ということですね。 f(!mysql_fetch_array($mysql_Row)){で一度mysql_fetch_arrayを使っているためにポインタが移動し、再度mysql_fetch_arrayを使ったときはポインタはリセットされないので戻す作業が必要ということでしょうか。 >$html_Code = ""; とても簡単な解決策があったのですね。気がつかなかったです。 難しく考えすぎていました。ありがとうございました。

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

$mysql_Rowの値(レコード件数)を判断するとか? > $mysql_Code = "SELECT * FROM infotable WHERE name='$kisetsu' > 一致するはずの一部のフィールドが表示されなかったりします。 データ次第じゃないですか?全項目埋まってるのかな? $mysql_Code = "SELECT id, name, kudamono, coment FROM infotable WHERE にするとか。

kiseki777
質問者

お礼

>データ次第じゃないですか?全項目埋まってるのかな? はい。全てにデータは入っています。 if(!mysql_fetch_array($mysql_Row)){ $html_Code .= '<tr><td colspan="4">条件に一致する項目はありません。</td></tr>'; } このコードを入れたとたんに一部のフィールドが表示されなくなりました。 >$mysql_Code = "SELECT id, name, kudamono, coment FROM infotable WHERE *ではダメなことがあるのですか・・・ このようにして試してみましたが、結果は同じでした。 あれから、調べたり試したりを繰り返していますが、解決しそうもありません。 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <title></title> <style type="text/css">#formeria{width:200px;float:left;}table{width:800px;float:left;border-collapse: collapse;border-spacing:0;}th{border:1px solid #ccc;background-color: #eee;}td{border:1px solid #ccc;}</style> <?php //-------------------------- //初期値設定 //-------------------------- $kisetsu = "春"; $kudamono = "りんご"; //-------------------------- if(isset($_GET['submit'])){ if(isset($_GET['kisetsu']) && isset($_GET['kudamono'])){ $kisetsu = htmlspecialchars($_GET['kisetsu']); $kudamono = htmlspecialchars($_GET['kudamono']); $mysql = mysql_connect('localhost','xxxxxxx','xxxxxxxxxxxx'); if(!$mysql){ die("MYSQLの接続に失敗。<br />".mysql_errno().":".mysql_error()); } if(!mysql_select_db('kisetsu',$mysql)){ die("データベースの接続に失敗。<br />".mysql_errno().":".mysql_error()); } $mysql_Code1 = "SELECT * FROM infotable WHERE name='$kisetsu' AND kudamono='$kudamono'"; $mysql_Code2 = "SELECT count(*) FROM infotable WHERE name='$kisetsu' AND kudamono='$kudamono'"; mysql_set_charset('utf8'); $mysql_Select = mysql_query($mysql_Code1,$mysql); $mysql_Count = mysql_query($mysql_Code2,$mysql); if(!$mysql_Select || !$mysql_Count){ die(mysql_error()); } $html_Code = ""; if($mysql_Count==0){ $html_Code .= '<tr><td colspan="4">条件に一致する項目はありません。</td></tr>'; } while($row = mysql_fetch_array($mysql_Select)){ $id = $row["id"]; $name = $row["name"]; $kudamono = $row["kudamono"]; $coment = nl2br($row["coment"]); $html_Code .= "<tr><td>$id</td><td>$name</td><td>$kudamono</td><td>$coment</tr>\n"; }}} ?> </head> <body> <table> <tr><th>id&nbsp;</th><th>name</th><th>kudamono</th><th>coment</th></tr> <?php echo $html_Code; ?> </table> <div id="formeria"> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" action="GET"> <select name="kisetsu" size="int"> <option value="春"<?php if($kisetsu=="春"){echo " selected";} ?>>春</option> <option value="夏"<?php if($kisetsu=="夏"){echo " selected";} ?>>夏</option> <option value="秋"<?php if($kisetsu=="秋"){echo " selected";} ?>>秋</option> <option value="冬"<?php if($kisetsu=="冬"){echo " selected";} ?>>冬</option> </select> <select name="kudamono" size="int"> <option value="りんご"<?php if($kudamono=="りんご"){echo " selected";} ?>>りんご</option> <option value="梨"<?php if($kudamono=="梨"){echo " selected";} ?>>梨</option> <option value="パイナップル"<?php if($kudamono=="パイナップル"){echo " selected";} ?>>パイナップル</option> </select> <input type="submit" name="submit" value="送信"/> </form> </div> </body> </html> 下記はテキストとしてエクスポートしたデータベースの一部です。 ===データベース kisetsu== テーブルの構造 infotable カラム|種別|NULL|デフォルト値 |id|int(11)|いいえ| |name|text|いいえ| |kudamono|text|いいえ| |coment|text|いいえ| テーブルのデータのダンプ infotable |1|春|梨|ああああああ、 いいいいいいいいい。 うううう。 |2|秋|梨|ああああああ、 いいいいいいいいい。 うううう。 ~~idは主キーです。それが30まで続きます。~~ |30|春|パイナップル|ああああああ、 いいいいいいいいい。 うううう。

関連するQ&A