你如何使用mysql join来过滤掉整行?

时间:2012-04-10 01:24:58

标签: php mysql sql database

我想运行一个查询,从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'

这确实会过滤掉用户回答特定问题的行,但不幸的是,如果另一个用户回答了相同的问题,它仍会返回该问题。如果用户没有回答,我想消除所有一起返回的问题。

欢迎提出意见/建议,谢谢。

5 个答案:

答案 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.")");