Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL如果子查询中的记录和1字段未设置或根本不在子查询中_Mysql_Subquery - Fatal编程技术网

MySQL如果子查询中的记录和1字段未设置或根本不在子查询中

MySQL如果子查询中的记录和1字段未设置或根本不在子查询中,mysql,subquery,Mysql,Subquery,我正在经历一个必须在多台设备上同步消息的过程。如果您在手机上阅读或删除该信息,下次拿起平板电脑时,该信息也会标记为已阅读或已删除。常见和预期的行为 在支持多设备之前,一切都很顺利。现在问题出现在第一个子查询中 进程:如果消息由用户读取,则通过将其添加到log_表来记录消息。如果用户将其删除,则会更新log_表中已删除的列。如果该用户未读取该消息,它将根本不在log_表中 如果log_表中有该用户和该消息的条目,查询将返回一个空结果集。问题出在第一个子查询中。如果在一台设备上读取消息,则log_表

我正在经历一个必须在多台设备上同步消息的过程。如果您在手机上阅读或删除该信息,下次拿起平板电脑时,该信息也会标记为已阅读或已删除。常见和预期的行为

在支持多设备之前,一切都很顺利。现在问题出现在第一个子查询中

进程:如果消息由用户读取,则通过将其添加到log_表来记录消息。如果用户将其删除,则会更新log_表中已删除的列。如果该用户未读取该消息,它将根本不在log_表中

如果log_表中有该用户和该消息的条目,查询将返回一个空结果集。问题出在第一个子查询中。如果在一台设备上读取消息,则log_表中会有一个条目,因此读取记录时NOT in会产生故障,这禁止我们在另一台设备上同步该读取消息

注意:消息不是1对1,而是1对多

预期结果: 我需要做的是,如果消息未读且不在log_表中,或者消息在log_表中且未被删除,则将其包括在内。建议

 SELECT A.*, T.name FROM a_table AS A 
 RIGHT JOIN types_table AS T ON A.msg_type = T.id 
 WHERE A.id NOT IN (SELECT msg_id AS id FROM log_table WHERE userid='3' AND msg_id = A.id AND UNIX_TIMESTAMP(deleted) = 0) 
 AND 3 IN (SELECT userid FROM subscriber_table AS S WHERE S.userid='3') AND A.id > 01

感谢您的建议

解决方案是一个条件WHERE子句

 SELECT A.*, T.name FROM a_table AS A 
 RIGHT JOIN types_table AS T ON A.msg_type = T.id 
 WHERE A.id NOT IN (SELECT msg_id AS id FROM log_table WHERE (userid='3' AND msg_id = A.id AND UNIX_TIMESTAMP(read) < 1) OR (userid='3' AND msg_id = A.id AND UNIX_TIMESTAMP(deleted) < 1) )  
 AND 3 IN (SELECT userid FROM subscriber_table AS S WHERE S.userid='3') AND A.id > 01

你的问题是什么?样本数据和期望的结果肯定会帮助其他人理解您可能要做的事情。你的问题不管用吗?我认为问题很清楚,但可能不。。。我想问的是,如果某个用户的log_表中没有记录,或者该用户的log_表中有记录,但该记录没有标记为已删除,那么如何包含该用户的log_表中的记录。