• 締切済み

SELECT、WHERE 文で、複数あるデータの内容のうち1つのデータしか戻ってこない

PHP version 4.4.4を使用しています。 テーブルの中に下記のデータがあるとします。 cID uname mls 2 abc@abc.com 1234567896 2 abc@abc.com 1234567894 2 abc@abc.com 1234567892 1 test@test.com 1234567892 下記のコードで SELECT、WHERE 文を使って絞った中の 複数あるデータ内容のうち1つのデータしか戻ってきません。 <例> cID:2、と uname:abc@abc.com の合った中から mls を取り出す。 $qry = "SELECT * FROM $table2 WHERE cID='$session[cID]' and uname='$session[uname]'"; ECHO で mls を表示させると 1234567896 しか戻ってきません。 私は、1234567896、1234567894、1234567892 と戻ってくるはずだと思ってるのですが、 どこか間違ってるのでしょうか? 色々な方法で試したり、インターネットで調べてもわかりません。 何方かこの問題を解決して頂けるととても助かります。 どうぞ宜しく御願いします。 $qry2 = "SELECT COUNT(*) AS numrows FROM $table2 WHERE cID='$session[cID]' and uname='$session[uname]'"; $res2 = mysql_query($qry2) or die('Error, query failed'); $row2 = mysql_fetch_array($res2, MYSQL_ASSOC); $numrows = $row2['numrows']; $qry = "SELECT * FROM $table2 WHERE cID='$session[cID]' and uname='$session[uname]'"; $result = mysql_query($qry) or die('Error, query failed'); $rows = mysql_fetch_array($result); echo "<font color=red>" . $rows['mls'] . "</font>"; if ($rows['cID'] == '' ) { echo "there is no cID"; } else if ($numrows > 3) { echo "You have Max limit ($numrows) reached."; } if ($rows['mls'] == $id) { echo "MLS # is already exists"; } else { echo "GREAT"; }

みんなの回答

  • kalze
  • ベストアンサー率47% (522/1092)
回答No.1

mysql_fetch_arrayについてちゃんと調べてみては? 「複数あるデータの内容のうち1つのデータしか戻ってこない」のではなく、現在のソースでは、「複数あるデータの内容のうち最初の1つしか取り出していない」です クエリの実行結果は、 1234567896 1234567894 1234567892 ということになります mysql_fetch_arrayを行うことで、1行目の結果を取得します mysql_fetch_arrayの結果を表示すると、当然 1234567896 となります 再度mysql_fetch_arrayを行うと内部のカウンタがインクリメントされているので、2行目を取得します 1234567894 が表示されることになります 以下、同様ですね 質問者さんのソースでは、1度しかおこなっていませんから、当然1つ目の結果しか得られません mysql_fetch_arrayはクエリの実行結果の行を配列に格納するメソッドです 列を格納するメソッドではありません $rows = mysql_fetch_array($result); echo "<font color=red>" . $rows['mls'] . "</font>"; 上記の部分を while( $rows = mysql_fetch_array($result) ){ echo "<font color=red>" . $rows['mls'] . "</font>"; } に書き換えれば、すべて表示されます

edokko-x
質問者

お礼

色々インターネットで又調べたら、 この問題を解決することが出来ました。 又何かありましたらその時はどうぞ宜しく御願いします。

edokko-x
質問者

補足

kalzeさま、 早速の御回答どうも有難うございます。 すみません、私の説明不足で申し訳ありませんが、 まだ問題があります。 WHILEのコードを入れて下記のとおり変えたのですが、 Insert record というメッセージとデータの書き込みを数回繰り返します。 WHILEでそうなるのは分かってるのですが、 そうしないと全ての一致したデータを比較して 思いどうりの結果にでないので、どうすれば良いのか又悩んでいます。 お忙しい中すみませんが、又教えて頂けると大変助かります。 どうぞ宜しく御願い致します。 $qry2 = "SELECT COUNT(*) AS numrows FROM $table2 WHERE cID='$session[cID]' and uname='$session[uname]'"; $res2 = mysql_query($qry2) or die('Error, query failed'); $row2 = mysql_fetch_array($res2, MYSQL_ASSOC); $numrows = $row2['numrows']; $qry = "SELECT * FROM $table2 WHERE cID='$session[cID]' and uname='$session[uname]'"; $result = mysql_query($qry) or die('Error, query failed'); $res3 = mysql_query($qry) or die('Error, query failed'); $row3 = mysql_fetch_array($res3); if ($row3['cID'] == '' ) { もし cID に同じ数字のデータが無ければデータに書き込む。 echo "no record"; } if ($numrows > 3) { もし3つ以上データが存在したらこのメッセージを表示する。 echo "<center><font color=red>You have Max limit ($numrows) reached.</font></center>"; } while( $rows = mysql_fetch_array($result) ){ if ($rows['mls'] == $id) { 同じWHEREで絞った中のデータに同じMLS番号があったら、このメッセージを表示する。 echo "MLS # is already exists"; } else { 上記をクリアしたらデータを書き込む。 $query=mysql_query("insert into $table2(cID,uname,mls) values('$session[cID]','$session[uname]','$id')") or die("Could not insert data because ".mysql_error()); echo "Insert record<br>"; }

関連するQ&A

専門家に質問してみよう