3

我正在使用以下 zend 代码从已验证 = 1 的表中选择所有数据,并且它对我有用。

$table = $this->getDbTable();
$select = $table->select();
$select->where('verified = 1');
$rows = $table->fetchAll($select);

不,我想从该表中选择已验证不等于“1”的所有数据。我尝试了以下方法,但它没有获取数据。

$select->where('verified != 1');
$select->where('verified <> 1');
$select->where('verified != ?', 1);

“已验证”列的数据结构:

Field: verified
type: varchar(45)
Collation: utf8_bin         
NULL: Yes   
Default: NULL  

知道如何在 Zend 的 WHERE 子句中使用“不等于”运算符吗?谢谢

4

5 回答 5

6
$select->where('verified != ?', 1);

真实世界查询示例:

    $query = $this->getDb()->select();
    $query->from('title', array('title_id' => 'id', 'title', 'production_year', 'phonetic_code'))
            ->where('kind_id = 1')
            ->where('title = ?', trim($title))
            ->where('production_year != ?', '2009')
            ->limit(1)
            ;

从 IMDB 数据库中选择电影信息。工作正常。

于 2009-12-19T09:51:31.960 回答
4

MySQL 支持自定义运算符<=>,如果操作数相等或都为 null,则返回 true。如果它们不同,或者一个操作数为空,则返回 false。

$select->where('verified <=> 1');

此运算符是非标准的。标准 SQL 具有语法:IS NOT DISTINCT FROM其工作方式与 MySQL 的<=>.

于 2009-12-25T07:04:50.787 回答
2

由于您的列是 varchar 也许尝试where verified != '1' or verified is null

于 2009-12-20T11:03:25.517 回答
1

你能告诉我们你正在查询的表的表结构吗?该列是否验证为 int 或 string?还可以尝试打印 ZEND 构建的 SQL 语句,请参见下面的 echo 行。

$table = $this->getDbTable();
$select = $table->select();
$select->where('verified = 1');
echo sprintf("sql %s",$select);
$rows = $table->fetchAll($select);
于 2009-12-19T14:37:47.303 回答
0

尝试 :

$select->where('verified != ?', '1');

在值周围加上引号。它对我有用。

于 2010-12-23T22:29:52.887 回答