※ ChatGPTを利用し、要約された質問です(原文:phpでsqlを利用した検索結果表示画面について)
phpでsqlを利用した検索結果表示画面について
このQ&Aのポイント
phpで検索結果表示画面を制作するには、pdoでmysqlデータベースに接続し、検索フォームのテキストデータを条件にあいまい検索を行い、必要な項目を取得してhtmlのテーブルに表示するプログラムを作成する必要があります。
問題は、別のテーブル内の該当データを表示することです。具体的には、tableAで取得したcolumnAとtableBのcolumnDが同じ場合に、tableBのcolumnEとcolumnFを表示したいという要件です。
データを表示するためには、tableAとtableBのデータを結合して一つのテーブルとして扱うことが必要です。結合条件はcolumnAとcolumnDが一致することです。結合後のテーブルから必要なデータを取得し、htmlのテーブルに表示するようにプログラムを作成してください。
phpで検索結果画面の制作を勉強中です。
pdoでmysqlデータベースに接続しています。
検索フォームに入力されたテキストデータを条件に
tableA内をあいまい検索をして
必要項目columnA、columnB、columnCを取得し、
htmlのテーブルの<td></td>に
それぞれ$row['columnA']、$row['columnB']、$row['columnC']を入れ、
while($row = $stmt->fetch(PDO::FETCH_ASSOC)で繰り返すことで
テーブル一行ごとに取得できたデータを1つ記載して結果として表示するプログラムを書き、うまく稼働させることができました。
問題は、今度はtableB内で、tableAで取得したcolumnAとtableBのcolumnDの値が同じという条件のもと、
該当レコードのcolumnE、columnFを取得して、
検索結果のテーブルに、tableAの取得データと同じ行で
データを表示させたいという点です。
単純に、上記のうまく稼動したテーブル内の
<td></td>内に
$stmtb=$db->prepare('SELECT columnE,columnF FROM tableB WHERE columnD :columnA');
$stmtb->bindValue(':columnA',$row['columnA'],PDO::PARAM_STR);
$stmtb->execute();
$row_b = $stmtb->fetch(PDO::FETCH_ASSOC);
print htmlspecialchars($row_b['columnD']);
というプログラムを記述しましたが、
テーブル上にデータが表示されませんでした。
どのようにしたら同一テーブル行内で別テーブルの該当データを表示することができるのでしょうか?
イメージが伝わりづらいかと思いますので以下、テーブルとカラムに名称を付けて、
表示したいテーブルのイメージとデータベーステーブルのイメージの画像を添付します。
添付画像の
顧客No.・顧客名・住所のデータが顧客情報用のテーブルに格納されていて
顧客No.・購入品・購入日のデータが購入品ログ用のテーブルに格納されている
状態で、
顧客No.と照合した購入品ログ用テーブル内の購入品のデータと購入日のデータを
添付画像のように、同じテーブルの行で表示をさせたいです。
ご回答、よろしくお願いします。
お礼
説明が下手ですみません。 INNER JOINですか!そんなに便利なSQL文があるのを初めて知りました! ごちゃごちゃしていたのが一発で解決しました! ご回答ありがとうございました!