我有一个行为奇怪的查询...
首先,这是一个查询,用于获取所有 PM,无论它们是否已为用户 ID 1 读取或删除:
SELECT * FROM `pms` WHERE `toid` = '1'
这将按预期返回3
行。接下来,让我们看看我是否只能获取该用户的未读消息:
SELECT * FROM `pms` WHERE `toid` = '1' AND `read` = '0'
这将按预期返回2
行。让我们看看我是否可以得到任何已被分箱的已读和未读消息:
SELECT * FROM `pms` WHERE `toid` = '1' AND `binned` = '0'
这将按预期返回2
行。
我需要运行的查询是获取指定用户 ID 的所有未读和未合并的消息。为此,我正在这样做:
SELECT * FROM `pms` WHERE `toid` = '1' AND `read` = '0' AND `binned` = '0'
但是,它应该返回1
行,因为我知道在数据库中有一条带有toid
as 1
,read
as0
和binned
as的消息,0
但是由于某种原因,上面的查询正在返回0
行...
为什么是这样?
更新
这是我在 Sequel Pro 中看到的表格结构的屏幕截图:
这是在 Sequel Pro 中看到的表格内数据的屏幕截图:
如您所见,肯定有 1 条记录,tid 为 1,读为 0,分箱为 0。
更新 2
这些是 ENUM 的原因是因为我希望在 MySQL 中存储一个布尔值。我通过将列强制为“1”或“0”并使其默认为“0”来做到这一点。如果有人有更好的方法在 MySQL 中存储布尔值,那么我很乐意学习。
其次,这是我User.class.php
文件中的 PHP 函数,它使用此 SQL 获取未读计数。这个函数0
在它应该返回的时候返回1
。$this->getUserId()
正在返回,因为那1
是我正在使用的当前用户:
public function getUnreadCount()
{
global $database;
$sql = "SELECT * FROM `pms` WHERE `toid` = '".$this->getUserID()."' AND `read` = '0' AND 'binned' = '0'";
$query = $database->query($sql);
$count = $database->count($query);
return $count;
}
感谢您到目前为止的帮助,但我仍然无法弄清楚为什么这不起作用。我read
在查询中使用添加反引号来防止 MySQL 将其用作关键字。
我敢打赌,我错过了一些非常明显的东西......