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

这应该返回表 Q 中在表 S 中没有匹配记录的所有条目。

于 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 回答