Zend:如何在WHERE子句中使用'not equal to'?

时间:2009-12-19 09:11:46

标签: zend-framework mysql where-clause

我正在使用以下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子句中使用'not equal to'运算符?感谢

5 个答案:

答案 0 :(得分:5)

$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数据库中选择电影信息。工作正常。

答案 1 :(得分:4)

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

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

此运算符是非标准的。标准SQL的语法:IS NOT DISTINCT FROM与MySQL的<=>一样。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

您能告诉我们您要查询的表的表结构吗?列验证是int还是字符串?另外,尝试打印ZEND构建的SQL语句,请参阅下面的回显线。

$table = $this->getDbTable();
$select = $table->select();
$select->where('verified = 1');
echo sprintf("sql %s",$select);
$rows = $table->fetchAll($select);

答案 4 :(得分:0)

尝试:

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

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