MySQL 外部結合後にWHERE検索できない
■質問内容:
超初心者です。質問が的外れかもしれませんが自己解決できずにいます。何卒ご教授ください。(完全)外部結合して、WHEREを使って検索(未解決)したい何が原因で検索できないのかわかりません。
■環境:
MySQL:5.0.45(win32)
php:5.2.5(win32)
■状況と経緯:
ブログのような形式で、
記事(親)にコメント(子)を追加できるように、
TABLEを親、子と2つ作成しています。
この2つのテーブルを、外部結合しました。
完全外部結合を達成するために、LEFT OUTER JOIN,UNION,RIGHT OUTERJOIN を使用してテーブルを結合しています。
この結合後に、WHEREでLIKE検索をしてみると、結合した全てのデータが表示されてしまい検索条件がHITしなくなってしまいました。
左外部結合(LEFT OUTER JOIN)の場合はWHEREでLIKE検索が実行できていました。出来ないことを試みようとしているのか、それとも構文間違いないのか、書籍やネットでの情報を試行錯誤してみましたが解決に至りません。書籍片手に試行している超初心者です。この事案に困り果てています。ご教授いただければ助かります。宜しくお願い致します。
■検索結果の表示を行うPHP抜粋(search.php)
/* 検索画面からの入力条件を変数で受け取り */
$kanriban_Reco_fp = "-1";
if (isset($_GET['kanriban'])) {
$kanriban_Reco_fp = $_GET['kanriban'];
}
$hakken_Reco_fp = "-1";
if (isset($_GET['hakken'])) {
$hakken_Reco_fp = $_GET['hakken'];
}
$hiniti_Reco_fp = "-1";
if (isset($_GET['hiniti'])) {
$hiniti_Reco_fp = $_GET['hiniti'];
}
$gen_Reco_fp = "-1";
if (isset($_GET['gen'])) {
$gen_Reco_fp = $_GET['gen'];
}
$dare_Reco_fp = "-1";
if (isset($_GET['dare'])) {
$dare_Reco_fp = $_GET['dare'];
}
$pgba_Reco_fp = "-1";
if (isset($_GET['pgba'])) {
$pgba_Reco_fp = $_GET['pgba'];
}
$kiiwa_Reco_fp = "-1";
if (isset($_GET['kiiwa'])) {
$kiiwa_Reco_fp = $_GET['kiiwa'];
}
/* データベース"work"のテーブルFとテーブルPを(完全)外部結合し、WHERE後にLIKE検索でHITした結果を一覧化するための処理*/
/* テーブルFOは、f. テーブルPOは、p. で表現しています。 . に続く内容は、フィールド名です。(レコードセット名をfpと任意に付けています)*/
mysql_select_db($database_work, $work);
$query_Reco_fp = sprintf("SELECT f.id, f.hakkensya, f.bajyon, f.naiyou, f.houkokusaki, f.kigen, f.jyoukyou, f.tourokubi, f.tantou, f.nin, f.syurui FROM fo f LEFT OUTER JOIN po p on f.id = p.id union SELECT f.id, f.hakkensya, f.bajyon, f.naiyou, f.houkokusaki, f.kigen, f.jyoukyou, f.tourokubi, f.tantou, f.nin, f.syurui FROM fo f RIGHT OUTER JOIN po p on f.id = p.id WHERE f.id LIKE %s AND f.hakkensya LIKE %s AND f.kigen LIKE %s AND f.houkokusaki LIKE %s AND f.jyoukyou LIKE %s AND f.bajyon LIKE %s AND f.naiyou LIKE %s AND p.id LIKE %s AND p.topinamae LIKE %s AND p.topikigen LIKE %s AND p.topihoukokusaki LIKE %s AND p.topinaiyou LIKE %s AND p.id LIKE %s ORDER BY id ASC",
--以上--
一覧表示のHTMLには、結合した全ての内容が、一覧表示されてしまいます。検索条件を無視している??
何卒、宜しくお願いいたします。
お礼
お世話になります。 ご回答と入門書を手掛かりに試行錯誤をしました。上記の回答への補足は的外れな内容だったようで大変失礼しました。 現時点で全件表示の回避はできておりませんが,AND検索の実装が優先でしたので,今回はこれで完成とします。 ありがとうございました。
補足
ご回答ありがとうございました。 早速書き換えて実行したところAND検索ができるようになりました。 ところが,3つある検索項目に何も入力せずに検索を実行するとすべてのレコードが表示されてしまいます。 何も入力しない場合はSQLを実行しないように冒頭に下記の記述をしております。 if (! isset($_POST['year']) || ! isset($_POST['client']) || ! isset($_POST['title'])) { exit; } 書き換える前のOR検索では,すべてブランクの時は実行されなかったのですが,AND検索時で同じ動作をさせるには何が足りないのでしょうか? ご教授いただければ幸いです。