繁体   English   中英

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

[英]How do you use mysql join to filter out an entire row?

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

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

欢迎提出建议/想法,谢谢。

您的问题太不清楚,缺乏信息。 您需要包括表的架构、示例记录和所需的 output 以使其更加清晰。 我想你想要 select 尚未回答的问题:我想运行一个查询来选择用户尚未回答的最新问题......该语句将仅如下所示:

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

CHAR_LENGTH获取列中字符串的长度。 当字段为空时返回ZERO

“选择$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'
    )

在这种情况下,左连接可能更合适:

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 中没有匹配记录的所有条目。

也许是这样的?

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'

我认为您需要运行 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.")");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM