我正在尝试订购我的分页结果。但它不起作用。
$this->paginate = array(
'limit' => 15,
'fields' => array('*', "MATCH (headline, author, short_headline, subline, teaser, text) AGAINST ('$var') AS score"),
'conditions' => "MATCH(headline, author, short_headline, subline, teaser, text) AGAINST('$var' IN BOOLEAN MODE)",
'order' => array('score' => 'desc')
);
查询看起来像:
SELECT *, MATCH (`headline`, `author`, `short_headline`, `subline`, `teaser`, `text`) AGAINST ('herz tod') AS `score`, `Story`.`id` FROM `fates`.`stories` AS `Story` WHERE MATCH(headline, author, short_headline, subline, teaser, text) AGAINST('herz tod' IN BOOLEAN MODE) LIMIT 15
并且按分数排序消失了!我做错了什么?感谢您的帮助!
最佳答案
尝试在尝试分页之前将 score 设为 virtualField,以便使用它来对分页进行排序。 (可能还有其他方法可以让它按分数排序,但我不知道它们。)
$this->Model->virtualFields['score'] = "MATCH (headline, author, short_headline, subline, teaser, text) AGAINST ('" . Sanitize::escape($var) . "')";
我还想指出,以防万一,如果您不能假设 $var
到是值得信赖的数据,例如 $var
来自用户输入。
关于php - cakephp 与 order by 的匹配不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22310568/