1

我想通过 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'))' 附近使用正确的语法

我不明白为什么我会收到此错误,尤其是为什么我一直没有收到此错误。谢谢你的帮助!

4

1 回答 1

1

我想我解决了这个问题:

在原始代码中,我使用了两个 ->where('id NOT in (?)', $id_array) 语句。当其中一个数组为空时发生错误。

于 2013-08-06T10:15:44.827 回答