我正在编写一个复杂的搜索算法来进行层级搜索。对于其中两个层,我需要非常奇怪的订单条款,Zend的sql构建器根本无法处理。有没有办法告诉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);
答案 0 :(得分:0)
如果order by
子句的参数是一个普通字符串,那么它将被考虑
只是一个列名(跟随或不是" ASC"或" DESC")。
可能的解决方案是使用Expression
类。像这样:
$select->order(array(new \Zend\Db\Sql\Expression($orderString)));
希望这有帮助。