Php MySQL WHERE子句选择值,然后根据另一列忽略一些值?

Php MySQL WHERE子句选择值,然后根据另一列忽略一些值?,php,mysql,where,Php,Mysql,Where,我有一个非常简单的问题(我想),但我似乎在任何地方都找不到答案。我肯定我已经想得太多了,但我还是想了解一下 使用MySQL,我希望使用WHERE子句基于列选择表中的行,然后基于另一列优化搜索。更具体地说,我希望返回特定用户尚未归档的所有条目 以下是我今天的收获: “从用户标识为“4”且存档为“是”的条目中选择* 这不起作用,因此我尝试: “从条目中选择*,其中(用户id='4'和存档的'yes')” 但这也不起作用 我是否需要返回该用户的所有条目,然后使用我的脚本语言从该数组中删除“archiv

我有一个非常简单的问题(我想),但我似乎在任何地方都找不到答案。我肯定我已经想得太多了,但我还是想了解一下

使用MySQL,我希望使用
WHERE
子句基于列选择表中的行,然后基于另一列优化搜索。更具体地说,我希望返回特定用户尚未归档的所有条目

以下是我今天的收获:

“从用户标识为“4”且存档为“是”的条目中选择*

这不起作用,因此我尝试:

“从条目中选择*,其中(用户id='4'和存档的'yes')”

但这也不起作用

我是否需要返回该用户的所有条目,然后使用我的脚本语言从该数组中删除“archive”值为“yes”的所有条目(带有for循环或其他内容)


提前感谢您的帮助

一种方法是将“是”或“否”的答案更改为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
   }
$query=execute(数组(
“:id'=>$\u GET['id'],
':true'=>1,
));
如果($results->rowCount()<1)
{
回显“此用户没有未归档”;
}
否则{
//拉取未归档的数据
}

您没有任何实际的PHP,因此如果您不熟悉我发布的内容,请阅读PDO。如果
存档
列中有
NULL
值,则这些行将不满足不等式谓词。(这是布尔三值逻辑的老问题…
TRUE
FALSE
NULL

有两种方法可以处理
NULL
值,以获取返回的值

作为一个选项,您可以使用(特定于MySQL的)空安全比较运算符:

例如:

... WHERE user_id = '4' AND NOT (archived <=> 'yes')
。。。其中用户_id='4'而不是(存档的'yes')
这实际上相当于更符合ANSI标准:

... WHERE user_id = '4' AND (archived <> 'yes' OR archived IS NULL)
。。。其中用户_id='4'和(存档的'yes'或存档的为空)

参考资料:

您是否从用户id为“4”的条目中选择*得到任何结果?

您是否可以通过运行DESC条目来包括表结构?以及您希望选择的几行。理论上,查询可以正常工作-第一个和第二个查询完全相同,在此上下文中不需要括号。两个查询相似,括号在第二个查询中没有任何区别。@Soujirou所有条目都是相同的returned@dbadness我删除我的答案。请在sqlfiddle中显示您的查询,这完全是事实-我应该指出,
archived
列不是
yes
就是
NULL
,但是如果您在sqlfiddle中找到了它,那就太好了。非常感谢你@DBADDY:我在你的问题中没有看到SQL的问题。当我们没有得到关于列是否定义为NOTNULL的信息时,我们只需要假设在某个点上有一行包含NULL。与
NULL
的相等和不相等比较总是产生
NULL
。(SQL具有三值布尔逻辑:布尔表达式的结果可以为真、假或空。)