- ベストアンサー
3つのテーブルを結合したSELECT文に問題がある
- MySQLのSQL文に関する質問です。3つのテーブルを結合したSELECT文を使用してデータを呼び出そうとしていますが、一部のデータが呼び出せない状況です。問題の原因を特定できず、アドバイスを求めています。
- 質問テーブルには質問データがあり、ユーザーテーブルとカテゴリーテーブルと結合してデータを呼び出そうとしています。しかし、一部のデータだけが呼び出せない状態です。どこに問題があるのか分からず、助言を求めています。
- MySQLのバージョンは5.1.22-rcです。質問テーブルからデータを呼び出すためにSELECT文を使用していますが、結合したテーブルの一部のデータが呼び出せません。原因を特定できないため、アドバイスをお願いしています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> $sql = "SELECT * FROM question WHERE q_no = '$get_q_no' AND state = 'on' AND q_state = 'on'"; > このように、questionだけを呼出すと問題ないものの 以下の2つを投げて、上記と同じ件数が得られるかどうか、試してみては? SELECT * FROM question INNER JOIN user ON question.q_user_no = user.user_no WHERE q_no = '$get_q_no' AND state = 'on' AND q_state = 'on' SELECT * FROM question INNER JOIN category2 C1 ON Q1.q_category_no = C1.no WHERE q_no = '$get_q_no' AND state = 'on' AND q_state = 'on'
その他の回答 (2)
- bin-chan
- ベストアンサー率33% (1403/4213)
userかcategory2でレコード削除してたら不一致が生じますね
お礼
ご親切な対応に感謝いたします。 ありがとうございました!
- yambejp
- ベストアンサー率51% (3827/7415)
questionテーブルに格納されているq_user_noやq_category_noは userテーブルやcategoryテーブルに確実に対応するナンバーが収まっているのでしょうか? もし抜けてれば当然inner joinでつなぐ限り一部のデータしかでてきません。 とりあえず検証のため「inner join」の記述を「left join」に切り替えて テストしてみてください。
お礼
yambejp様 ご親切なご回答ありがとうございます。 仰られるように、対応するナンバーが収まっていない事に気が付きました。 お騒がせして申し訳ありません。 ご親切な対応に感謝いたします。
お礼
bin-chan様 早速のご回答ありがとうございました。 仰られるようにテーブルを2つに別けてみたところ、各テーブルに収まっているデータに誤りがあることに気が付きました。 ジャンルの数を減らしていたのですが、それにより検索対象が変わっていた次第です。 お恥ずかしい限りですが、ご指摘頂いたことにより気付くことが出来ました。 有難うございました!