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