2010-11-20 18 views
2

私は、クエリの始まり持って比較しないWHEREを選択します。 - 私は一度に1つのステップ移動しています。もちろん、MySQLの複数テーブル2つのテーブル

SELECT tf_threads.*, tf_posts.* FROM tf_threads, tf_posts WHERE tf_threads.thread_id=54

を、それが1だけのスタートです時間が経つとそれはずっと良くなるでしょう。私が現時点で抱えているのは、WHERE節を取得して、あるテーブルの列と他の列ではなくPHP変数を比較する方法です。

私が持っているPHPはこれです:

SELECT $tf_threads.*, $tf_posts.* FROM $tf_threads, $tf_posts WHERE $tf_threads.thread_id=$tf_this_forum

ここで重要なのビットが$tf_threads.thread_id=$tf_this_forumです。私はこれを試すと、単純に行を返しません.SQLはImpossible WHERE noticed after reading const tablesです。確かにこれはうまくいくはずですか?明らかに、そうではありません、だから誰でもここでお手伝いできますか?

おかげで非常に多く、

ジェームズ

編集:私はまた、このように純粋なMySQLでは、クエリを実行しようとしている

SELECT tf_threads.*, tf_posts.* FROM tf_threads, tf_posts WHERE tf_threads.thread_id=54

両方を引用符で54ラウンドと無し、同じ行なしの結果となります。

答えて

1

クエリは暗黙的にCROSS JOINを実行しており、あまりにも多くの$という兆候が含まれているようです。

私は、次の追加の変更を提案したい:

  • 使用ANSI-92は、ANSI-89は、(カンマ)参加する代わりに(JOINキーワードを)加入。
  • intvalを$ tf_this_forumに適用して、整数であることを確認してください。
  • 文字列からクエリを動的に構築する代わりに、バインドパラメータを使用することを検討してください。
  • PHP変数を参照する場合は、$のみを使用してください。

インポッシブルエラーについてのconstテーブルにを読んだ後に気づいWHEREこれは、行が一致しないことを意味します。検索している行が実際にデータベースに存在することを確認します。それはそうではないかもしれない。

+0

ありがとう!あなたの 'JOIN'弾丸はうまくいった。 'tf_threads。*、tf_posts。* FROM tf_threads LEFT JOIN tf_posts ON tf_threads.thread_id = 54'このクエリを実行すると、 – Bojangles

1
SELECT tf_threads.*, tf_posts.* FROM tf_threads, tf_posts WHERE 
tf_threads.thread_id='$tf_this_forum' 

注:それはまだエスケープされていない場合は、$tf_this_forummysql_real_escape_string必要があります。

+0

ありがとう、とにかく 'thread_id'は数値フィールドです - 混乱を避けるために私はそれを私のOPに含めるべきでした。 @Mark Byerの投稿記事を参照してください。 – Bojangles

+0

また、他のユーザーには良いアドバイスを+1してください - あなたはいつも変数が数値であることを保証することはできません! – Bojangles

関連する問題