■質問内容:
超初心者です。質問が的外れかもしれませんが自己解決できずにいます。何卒ご教授ください。(完全)外部結合して、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には、結合した全ての内容が、一覧表示されてしまいます。検索条件を無視している??
何卒、宜しくお願いいたします。
お礼
早速のご解答、ありがとうございます。 試してみたのですが上手く行きません。 下記の方法と理解して実施。 ------- ~FROM fo f LEFT OUTER JOIN …(←前のクエリ) ★★ココ★★ ~union … ~FROM fo f RIGHT OUTER JOIN …(←後のクエリ) WHERE f.id LIKE … -------- ★の部分に、”後のクエリ”に続くWHERE句と同じ内容を追加して 実行してみましたが、左外部結合を行った状態と同じ結果が返ってきます。 回答の解釈が間違っていたらごめんなさい。 他にお気づきの点がありましたら、ご指摘いただけるとありがたいです。宜しくお願いします。
補足
#1様へ 質問者です。 お礼を掲載の後、もう一度書籍を読み直し、 動きを確認したところ出来ました!! ------- ~FROM fo f LEFT OUTER JOIN …(←前のクエリ) ★左側テーブルWHERE句★ ~union … ~FROM fo f RIGHT OUTER JOIN …(←後のクエリ) ★右側テーブルWHERE句★ -------- で検索条件で一覧表示可能となりました! 本当に助かりました。ありがとうございました。