【问题标题】:SQL query to Zend query builder (OR, AND, ORDER BY FIELD, IS NULL)对 Zend 查询构建器的 SQL 查询(OR、AND、ORDER BY FIELD、IS NULL)
【发布时间】:2017-08-09 10:23:11
【问题描述】:

我正在尝试更改我的 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 You 您的 SQL 语法有错误;检查对应的手册 您的 MySQL 服务器版本,以便在 ') LIMIT 1' 附近使用正确的语法 在第 2 行

【问题讨论】:

  • var_dump($query) 看看 zend 查询生成器做了什么..
  • 尝试把prodid IS NULL, 1, 0), prodid)末尾的)去掉
  • @nacho 但这样就结束了:(prodid='' OR prodid IS NULL, 1, 0)
  • @Zeljka 的输出不清楚。整个查询中是否缺少一个单元格?
  • @Rick Sanchez,我的意思是最后一个,第三个 prodid 之后的那个,所以整行将是 order(new Zend_Db_Expr("FIELD(prodid='' OR prodid IS NULL , 1, 0), prodid"))

标签: php mysql zend-framework


【解决方案1】:

尝试以这种方式更改您的查询,我在 order by 的最后一个 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)
            ;

【讨论】:

    猜你喜欢
    • 2015-03-25
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2020-06-29
    • 1970-01-01
    相关资源
    最近更新 更多