我想通过 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'))' 附近使用正确的语法
我不明白为什么我会收到此错误,尤其是为什么我一直没有收到此错误。谢谢你的帮助!