【问题标题】:Zend Select and NOT IN arrayZend Select 和 NOT IN 数组
【发布时间】: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


【解决方案1】:

我想我解决了这个问题:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-01
    • 2012-05-01
    • 2016-03-19
    • 1970-01-01
    • 2021-09-24
    相关资源
    最近更新 更多