• ベストアンサー

PHP+MySQLの繰り返し処理で…

PHPとMYSQLを使ってWEBページを作っています。 わからないところがあるので、どなたか教えていただけないでしょうか?php5+mysql4.0.1です。 検索フォームから送られてきた条件をもとに、1ページに10件の検索結果を表示しています。表示するのはテーブル1の名前で、ここまではうまくいっています。 例:------------------------------------------ 検索結果 神奈川県 林さん 東京都 遠藤さん 北海道 近藤さん 例:------------------------------------------ このあと、上記クエリの結果が続く限りテーブル2 から名前に該当する趣味を表示したいと思います。 例:------------------------------------------ 検索結果 神奈川県 林さん テニス 東京都 遠藤さん サッカー 北海道 近藤さん 絵画 例:------------------------------------------ この処理を加えると、一ページに10件表示されていたものが最初の一件だけしか表示されなくなってしまいます。whileの中に新たにクエリを書いているからでしょうか…? 以下に問題部分だけ見やすくまとめなおしたソースを書きました。 (1)$sql = "SELECT name,ken FROM tablename where ken=$ken"; $mysql->query($sql); while($row = $mysql->fetch()){ $name = $row[name]; (2)$sql2 = "SELECT syumi FROM tablename2 WHERE name='$name'"; $mysql->query($sql2); while($row2 = $mysql->fetch()){ $syumi = $row2[syumi]; } echo "$ken"."$name"."$syumi"; } わかりづらい説明ですみません。 テーブル1に趣味のフィールドを作ることはできない前提で、このままのDB構造でうまく上記を解決することはできますか? ご指導よろしくお願いします。

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

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.1

「検索フォームから送られてきた条件」とは何でしょうか? 2つのテーブルのカラム定義を教えてください。 提示されたスクリプトで、SQL文を格納する変数の先頭に付いている (1)や(2)の意味合いを教えてください。 以下は、素人考えです。 仮に、2つのテーブルにおいて、「名前」カラムがキーとなっているのであれば、 $sql = "select tablename.ken, tablename.name, tablename2.syumi from tablename, tablename2 where tablename.name = tablename2.name"; というようなSQL文(間違っているかもしれません)で、 2つのテーブルから都道府県、名前、趣味を一度に検索できるような気がするのですけれど…。

ataru2
質問者

お礼

ご回答ありがとうございました! 教えていただいた方法で無事にできました、本当にありがとうございます。 (1)(2)というのはこことここでクエリ発行してますという私の無駄な配慮でした。 検索フォームからは県だけを送って、それをもとに検索しています。 教えていただいたJOINの方法は、私の参考書のページに付箋が貼ってありました。以前にも使っていたようです…。 お忙しいところどうもありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • mpx
  • ベストアンサー率71% (149/209)
回答No.2

一回目も二回目も$mysqlというオブジェクトを使っているので、二回目のクエリーで、一回目の結果を破壊していますね。 二回目のクエリー用は別オブジェクトを新たに生成して破壊しないようにしましょう。 テーブル構造が分からないので可否は不明ですが、私ならjoinして一回のクエリーで済ませたいところです。

ataru2
質問者

お礼

ご指摘ありがとうございます! 本を見ながら勉強しているのですが、クラスのところは難しくて避けたままやっていました…。 ご回答いただいたおふた方に教えていただいたJOINの方法で無事にできました。とても勉強になりました。どうもありがとうございました。

すると、全ての回答が全文表示されます。