【问题标题】:Can I pass a string to Zend sql's order function?我可以将字符串传递给 Zend sql 的 order 函数吗?
【发布时间】:2014-11-25 08:38:33
【问题描述】:

我正在编写一个复杂的搜索算法,它按层进行搜索。对于其中的两个层,我需要 Zend 的 sql 构建器根本无法处理的非常奇怪的 order 子句。有没有办法告诉 Zend 只在 order by 子句中添加一个字符串而不试图解释和破坏它?

对于那些想知道的人,我的订单示例是

IF(Name LIKE '1234 %' OR Name LIKE '% 1234 %' OR Name LIKE '% 1234' OR Code LIKE '1234 %' OR Code LIKE '% 1234 %' OR Code LIKE '% 1234', 1, 0) + IF(Name LIKE 'ASF %' OR Name LIKE '% ASF %' OR Name LIKE '% ASF' OR Code LIKE 'ASF %' OR Code LIKE '% ASF %' OR Code LIKE '% ASF', 1, 0)

它基本上计算当前记录包含的搜索字符串中的单词数并按此排序。

我想做这样的事情

$sql = new Sql($this->adapter);
$select = $sql->select();
$select->from('Table');
$select->where($where);
$select->order($orderString);

【问题讨论】:

    标签: zend-framework2 zend-db-select


    【解决方案1】:

    如果order by子句的参数是纯字符串,那么会考虑 仅作为列名(后跟或不跟“ASC”或“DESC”)。

    一个可能的解决方案是使用Expression 类。像这样:

     $select->order(array(new \Zend\Db\Sql\Expression($orderString)));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      相关资源
      最近更新 更多