下面是我的代码,我想根据序列 3、10 和 7 拉取数据,我该怎么做? 到目前为止,它首先拉取 10,然后是 7,然后是 3。
<code>
$cars = $this->car->find('all', array(
'conditions' => array(
'car.id' => array(3, 10, 7)
),
'limit' => 3,
'order' => array('car.id' => 'desc')
));
</code>
这个想法是按它们在数组中各自的位置对结果进行排序。在这种情况下,MySQL FIND_IN_SET
函数可以帮助您。
您可以按语句添加以下顺序:
ORDER BY FIND_IN_SET(car.id,'3,10,7')
注意:您需要在等效的cake php mysql
查询中按语句转换此顺序。
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 演示
编辑:
我不知道构建mysql查询CAKE PHP syntax
。
但是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'))
));