我有一个非常简单的问题(我认为),但我似乎找不到答案。我肯定我想太多了,但我还是想要洞察力。
使用MySQL,我想使用WHERE
子句根据列在表中SELECT
行,然后根据另一列优化该搜索。更具体地说,我希望返回来自某个特定用户的尚未存档的所有条目。
这是我今天的内容:
"SELECT * FROM entries WHERE user_id = '4' AND archived <> 'yes'";
这是不工作,所以我尝试:
"SELECT * FROM entries WHERE (user_id = '4' AND archived <> 'yes')";
但这也行不通。
我是否需要从该用户返回所有条目,然后从该数组中删除所有具有"存档"值为"是"的条目,使用我的脚本语言循环或其他东西?
提前感谢您的帮助!
如果archived
列中有NULL
值,那么这些行将不满足不等式谓词。(这是布尔三值逻辑的古老问题……TRUE
, FALSE
, NULL
.)
有几种方法来处理NULL
值,以获得返回的值。
作为一个选项,您可以使用(MySQL特定的)null安全比较运算符: <=>
。
例如:
... WHERE user_id = '4' AND NOT (archived <=> 'yes')
这实际上相当于更符合ansi标准:
... WHERE user_id = '4' AND (archived <> 'yes' OR archived IS NULL)
参考:https://dev.mysql.com/doc/refman/5.5/en/comparison-operators.html operator_equal-to
一个想法是将是或否的答案更改为0/1的真假陈述。把你的存档设置为0默认设置为1然后你可以输入
$query = <<<SQL
SELECT id,title,name,etc
FROM entries
WHERE user_id = :id
AND archived = :true
SQL;
$results = $this->dbconn->prepare( $query );
$results->execute( array (
':id' => $_GET['id'],
':true'=> 1,
));
if($results->rowCount() < 1)
{
echo "No Unarchived for this user";
}
else {
//Pull Unarchived Data
}
你没有任何实际的PHP,所以如果你不熟悉我发布的是PDO,我建议你阅读它