所以我尝试用查询选择未读邮件,但结果为空。我需要从一个单独的表读取信息,以便它会知道它是读或不。我试着做一些像if语句,所以如果readed不存在它将是未读的,但我不能得到修复
我的问题是:
SELECT * FROM notify
INNER JOIN readed ON readed.acc_ID = '26' AND readed.user_ID = '6'
AND readed.msg_ID = notify.ID AND readed.readed != '1' OR readed.ID IS NULL
WHERE notify.groep = '1'
DB - readed
ID - int
user_ID - int
acc_ID - int
msg_ID - int
readed - enum ('0','1')
DB - notify
ID - int
notfi - text
thumb_src - text
title - text
url - text
groep - int
我希望有人知道是什么问题!
1条答案
按热度按时间w1e3prcc1#
对我来说,这个问题似乎是正确的,除了
OR
,所以我想问题出在数据上。我将首先尝试演示如何改进查询,然后尝试演示如何调试数据。首先,让我们把这个问题撇开
OR
条件,因为这将无法在JOIN ON
条款。其次,在比较整型字段和值时,不应在值周围加引号。这只会让每个试图理解查询的人担心,因为引号表示字符串值,而且会让mysql的解析器担心(即减慢速度),因为它必须将字符串值转换为数字。
第三,混淆正常
WHERE
条件和JOIN ON
情况令人担忧,作风恶劣(imho)。我总是建议只使用实际将表链接到JOIN ON
条款和其他条件。遵循这个建议会导致类似的情况:
这应该与原始查询减去
OR
部分。现在,既然我们怀疑数据有问题,我们就可以开始调试数据了。首先,离开这个地方
WHERE
条款:如果这返回数据,那么您至少知道
readed
表匹配中的行notify
table。如果它不返回任何数据,那么就没有任何行匹配在一起,并且已经找到了问题的根源。如果以上返回数据,则重新添加
WHERE
逐行测试,每一步后测试。例如,从然后继续
以此类推,每次都测试查询。
这样,你就有希望找到问题所在。我确信问题出在数据上,而不是查询上。