对Zend查询构建器的SQL查询(OR,AND,ORDER BY FIELD,IS NULL)

时间:2017-08-09 10:23:12

标签: php mysql zend-framework

我试图更改我的SQL查询:

SELECT link FROM shop_product_videos WHERE brand='Goddess' AND ( prodid='' OR prodid='' OR prodid IS NULL) 
ORDER BY FIELD(prodid='' OR prodid IS NULL, 1, 0), prodid
LIMIT 1 

这是我到目前为止所尝试的:

    $query = $this->select('link')
                  ->from('shop_product_videos')
                  ->where('brand=?', $brand)
                  ->where('prodid=?', $prodid)
                  ->orWhere('prodid=""')
                  ->orWhere('prodid is null')
                  ->order(new Zend_Db_Expr("FIELD(prodid='' OR prodid IS NULL, 1, 0), prodid)"))
                  ->limit(1)
                ;

    return   $this->getAdapter(false)->fetchAll($query); 

但我不断收到错误:

  

发生错误

     

异常信息:

     

消息:SQLSTATE [42000]:语法错误或访问冲突:1064您   您的SQL语法有错误;检查对应的手册   你的MySQL服务器版本正确的语法使用在附近')LIMIT 1'   在第2行

1 个答案:

答案 0 :(得分:1)

尝试以这种方式更改您的查询,我在订单中的最后一个prodid之后修改了以下内容,并且我在所有列名称之前设置了表的名称

$query = $this->select('link')
              ->from('shop_product_videos')
              ->where('shop_product_videos.brand=?', $brand)
              ->where('shop_product_videos.prodid=?', $prodid)
              ->orWhere('shop_product_videos.prodid=""')
              ->orWhere('shop_product_videos.prodid is null')
              ->order(new Zend_Db_Expr("FIELD(shop_product_videos.prodid='' OR shop_product_videos.prodid IS NULL, 1, 0), shop_product_videos.prodid"))
              ->limit(1)
            ;