3

我正在尝试订购我的分页结果。但它不起作用。

$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

按分数排序已经消失了!我做错了什么?感谢帮助!

4

1 回答 1

1

在尝试分页之前尝试为 virtualField 打分,以便使用它来排序分页。(可能还有其他方法可以按分数排序,但我不知道。)

$this->Model->virtualFields['score'] = "MATCH (headline, author, short_headline, subline, teaser, text) AGAINST ('" . Sanitize::escape($var) . "')";

我还想指出,以防万一,如果您不能假设$var是可信赖的数据,例如$var来自用户输入的数据,您的代码(以及我在上面发布的代码)很容易受到 SQL 注入的影响。

于 2014-03-10T21:33:47.493 回答