1

2つの別々のテーブルからユーザーが回答していない最新の質問を選択するクエリを実行したいと思います。これは私が思いついたものです:

SELECT Q.question_id, Q.question, S.user_id, S.question_id 
FROM questions Q inner join answers S on Q.question_id=S.question_id 
WHERE S.user_id != '$userID'

これは確かに、ユーザーが特定の質問に回答した行を除外しますが、残念ながら、別のユーザーが同じ質問に回答した場合でも、その質問が返されます。ユーザーが回答していない場合に返される質問をすべて削除したいと思います。

提案/アイデアは大歓迎です、ありがとう。

4

5 に答える 5

2

あなたの質問は不明確すぎて、情報が不足しています。より明確にするために、テーブルのスキーマ、サンプルレコード、および必要な出力を含める必要があります。まだ回答されていない質問を選択したいと思います。ユーザーが回答していない最新の質問を選択するクエリを実行したいと思います...ステートメントは次のようになります。

SELECT * FROM Questions WHERE CHAR_LENGTH(user_id) = 0;

CHAR_LENGTH列内の文字列の長さを取得します。ZEROフィールドが空のときに戻ります。

于 2012-04-10T01:58:45.593 に答える
2

"によって回答されていないすべての質問を選択してください$userId":

SELECT Q.question_id, Q.question
FROM questions Q 
WHERE 
    Q.question_id NOT IN (
         /* Select all questions's ids, which have been answered by $userId */
         SELECT `question_id` 
         FROM `answer` 
         WHERE `answer`.`user_id` = '$userId'
    )
于 2012-04-10T02:23:10.603 に答える
1

この場合、左結合の方が適切な場合があります。

SELECT Q.question_id, Q.question, S.user_id, S.question_id 
FROM questions Q 
LEFT JOIN answers S on Q.question_id=S.question_id AND S.user_id = '$userID'
WHERE s.user_id IS NULL

これにより、テーブルSに一致するレコードがないテーブルQのすべてのエントリが返されます。

于 2012-04-10T01:59:18.387 に答える
0

多分このようなもの?

SELECT Q.question_id, Q.question, S.user_id, S.question_id 
FROM questions Q
JOIN answers S ON Q.question_id=S.question_id 
WHERE 
    S.user_id NOT IN (
         SELECT user_id 
         FROM answers 
         WHERE question_id = Q.question_id
    )
    AND S.user_id = '$userID'
于 2012-04-10T01:37:17.397 に答える
0

結合は一意の属性を持つ2つのテーブルを対象としているため、2つの個別のクエリを実行する必要があります。そのため、結合の1つの質問と多数の回答を一致させることができませんでした。

$query = mysql_query("select * from `answers` where `user_id` = '$bar'");

while ($rslt = mysql_fetch_assoc($query);) {
    $in_clause .= $rslt['question_id'].',';
}
$in_clause = substr($in_clause,0,-1);
$next_query = mysql_query("select * from `questions` where `question_id` !in(".$in_clause.")");
于 2012-04-10T01:38:14.633 に答える