我想运行一个查询,从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'
这确实会过滤掉用户回答特定问题的行,但不幸的是,如果另一个用户回答了相同的问题,它仍会返回该问题。如果用户没有回答,我想消除所有一起返回的问题。
欢迎提出意见/建议,谢谢。
答案 0 :(得分:2)
您的问题太不明确,而且缺乏信息。您需要包含表格的模式,样本记录和所需的输出,以使其更清晰。我想你想选择尚未回答的问题: 我想运行一个查询,选择用户未回答的最新问题... 该声明将只是看起来像这样:
SELECT * FROM Questions WHERE CHAR_LENGTH(user_id) = 0;
CHAR_LENGTH
获取列中字符串的长度。当字段为空时,它返回ZERO
。
答案 1 :(得分: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'
)
答案 2 :(得分: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中没有匹配记录的所有条目。
答案 3 :(得分: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'
答案 4 :(得分: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.")");