【发布时间】:2013-08-05 09:48:57
【问题描述】:
我想按 id 选择不在其他表中的表条目。 使用如下代码:
$table2 = new OfferTable();
$select = $table2->select()->from('offers', array('aId as id'))
->where('mem_id =?', $memId);
$table = new otherTable();
$select2 = $table->select()->where('id NOT in (?)', $select);
$result = $table->fetchAll($select);
这很好用,但是当 OfferTable 有很多条目并且第一次选择只选择几个条目时会很慢。
所以我尝试了以下方法:
$table2 = new OfferTable();
$select = $table2->select()->from('offers', array('aId as id'))
->where('mem_id =?', $memId);
$fetch = $table2->fetchAll($select);
$id_array = array();
foreach($fetch as $value){
$id_array[] = $value->id;
}
$table = new otherTable();
$select2 = $table->select()->where('city = ?', $city)
->where('id NOT in (?)', $id_array);
$result = $table->fetchAll($select);
这似乎工作得更快,但有时我会收到以下错误消息:
SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 ')) AND (id NOT IN ('3956', '3821'))' 附近使用正确的语法
我不明白为什么我会收到此错误,尤其是为什么我一直没有收到此错误。 谢谢你的帮助!
【问题讨论】:
-
查看查询并尝试在phpmyadmin中运行。
标签: mysql sql zend-framework zend-db-table