这个想法是按照它们在数组中的各自位置对结果进行排序。在这种情况下,MySQL FIND_IN_SET 函数可以帮助您。
您可以通过语句添加以下顺序:
ORDER BY FIND_IN_SET(car.id,'3,10,7')
注意:您需要在等效的 cake php mysql 查询中转换此 order by 语句。
MySQL FIND_IN_SET() 返回字符串的位置(如果存在)
(作为子字符串)在字符串列表中。字符串列表本身是一个
字符串包含由“,”(逗号)字符分隔的子字符串。
当搜索字符串不存在时,该函数返回 0
字符串列表,如果任一参数为 NULL,则返回 NULL。
FIND_IN_SET
示例输入:
查询:
SELECT *
FROM cars
id
2
3
4
5
6
7
8
9
10
11
输出:
查询:
SELECT *
FROM cars
WHERE cars.id IN (3,10,7)
ORDER BY FIND_IN_SET(cars.id,'3,10,7')
id
3
10
7
查看SQLFIDDLE DEMO here
编辑:
我不知道CAKE PHP syntax在构建mysql查询。
但cake php mysql 中的等效查询可能是这样的:
$cars = $this->car->find('all', array(
'conditions' => array(
'car.id' => array(3, 10, 7)
),
'limit' => 3,
'order' => array(FIND_IN_SET('car.id' , '3,10,7'))
));