MySQL WHERE 子句选择值然后根据另一列省略一些值?
MySQL WHERE clause selects values then omits some based on another column?
我有一个非常简单的问题(我认为),但我似乎无法在任何地方找到答案。我确定我想多了,但我仍然希望有见识。
使用 MySQL,我想根据使用 WHERE
子句的列 table 中的 SELECT
行,然后根据另一列优化搜索.更具体地说,我想 return 尚未存档的特定用户的所有条目。
这是我今天的内容:
"SELECT * FROM entries WHERE user_id = '4' AND archived <> 'yes'";
这不起作用,所以我尝试了:
"SELECT * FROM entries WHERE (user_id = '4' AND archived <> 'yes')";
但这也没有用。
我是否需要 return 该用户的所有条目,然后使用 for 循环从该数组中删除所有具有 'archive' 值 'yes' 的条目,或者使用我的脚本语言的东西?
提前感谢您的帮助!
一个想法是将是或否的答案更改为 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,我建议您阅读它。
如果 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
我有一个非常简单的问题(我认为),但我似乎无法在任何地方找到答案。我确定我想多了,但我仍然希望有见识。
使用 MySQL,我想根据使用 WHERE
子句的列 table 中的 SELECT
行,然后根据另一列优化搜索.更具体地说,我想 return 尚未存档的特定用户的所有条目。
这是我今天的内容:
"SELECT * FROM entries WHERE user_id = '4' AND archived <> 'yes'";
这不起作用,所以我尝试了:
"SELECT * FROM entries WHERE (user_id = '4' AND archived <> 'yes')";
但这也没有用。
我是否需要 return 该用户的所有条目,然后使用 for 循环从该数组中删除所有具有 'archive' 值 'yes' 的条目,或者使用我的脚本语言的东西?
提前感谢您的帮助!
一个想法是将是或否的答案更改为 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,我建议您阅读它。
如果 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