我正在使用以下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'运算符?感谢
答案 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');
在值周围加上引号。它对我有用。