2017-01-16 12 views
0

questions)というテーブルからランダムな列(url)を取得するMySQLi文を作成しようとしています。しかし、私はちょうどランダムを望んでいませんurl。このステートメントは、trackingという別のテーブルを含む3つの条件に依存します。 trackingは、3つの列(user_id,q_id,answer)を含みます。だから最終的に私はユーザーがまだ答えていないすべてのurlsを検索したい。たとえば、ユーザーが質問に既に回答している場合は、 q_id: 2answer: 1となります。このステートメントを実行すると、q_id: 2はランダムurlsの1つであってはなりません。 q_idも主キーであるquestionsであることを指摘することも重要です。ランダムな列を取得するために左結合が機能しない

私はこの声明を試してみましたが、それはいくつかの理由のために働いていない:

$values = $db->query(" 
SELECT url 
    FROM questions 
    LEFT 
    JOIN tracking 
    ON tracking.user_id = '$id' 
    AND questions.q_id != tracking.q_id 
    AND tracking.answer != NULL 
ORDER 
    BY rand() LIMIT 1 
"); 

は、どのように私はそれがとてもランダムurlがユーザによって既に回答されている質問を除いて取得されることができますか?

答えて

2

あなたは等しくないに参加しようとするので、1:n結合で終わることになりますが、これはうまくいきません。 (この場合ではない)。

SELECT url FROM questions WHERE q_id NOT IN 
     (SELECT q_id FROM tracking WHERE user_id = $id 
     AND answer IS NOT NULL) 
ORDER BY rand() LIMIT 1 

をそして、これは、準備された文を見て、クエリに変数を挿入するための保存方法ではありません:

このような何かを試してみてください http://www.w3schools.com/php/php_mysql_prepared_statements.asp

+0

うーん、私は述べてエラー取得しています: '非オブジェクト上のメンバ関数fetch_array()への呼び出し'クエリの後には、次のようにします: '$ rows = $ values-> fetch_array();' – user2896120

+0

データベース環境で(可能であれば)直接クエリをテストします。少なくともmysqlエラー。 echo mysql_errno($ db)。 ":" mysql_error($ db)。 "\ n"; –

+0

うーん、今は動作していますが、何らかの理由でまだクエリが返されているURLがクエリに残っています... – user2896120

関連する問題