Zend Select и NOT IN массив
Я хочу выбрать записи таблицы по идентификатору, которых нет в другой таблице. Используется следующий код:
$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, чтобы найти правильный синтаксис для использования рядом с ')) AND (id NOT IN ('3956', '3821'))' в строке 1
Я не понимаю, почему я получаю эту ошибку и особенно почему я не получаю ее все время. Спасибо за вашу помощь!
1 ответ
Я думаю, что я решил проблему:
В исходном коде я использовал два оператора ->where('id NOT in (?)', $ Id_array). Ошибка произошла, когда один из массивов был пуст.