在sql中,我有这个查询,它完美地工作并按照给定的数组排序"命令BY字段"。但是在cakephp它没有用。
SELECT * FROM users
WHERE users.Id IN (3,7,2,13)
ORDER BY FIELD(users.Id ,3,7,2,13)
我按照以下顺序获取用户。这是完美的
user _id
3
7
2
13
Cakephp 3
$unique_user_id_list = (3,7,2,13);
$id_list = '3','7','2','13'; This is string.
$users = $this->Users->find('all',[
'contain' => [],
'conditions'=>['Id IN' => $unique_user_id_list],
'order BY FIELD'=>['Users.Id'=>$id_list]
]);
在此查询中,我按以下顺序获取用户
user_id
2
3
7
13
我尝试了两种方式,但没有人工作。只有"订单"子句给出错误,而另一个"按字段排序"没有错误,但没有按预期工作。
'order'=>['Users.Id'=>$id_list]
'order BY FIELD'=>['Users.Id'=>$id_list]
任何想法如何在cakephp 3中编写上面的sql查询以使其工作。
答案 0 :(得分:1)
回答这个问题
简而言之,'order' => "FIELD(id, '2', '3', '7', '13')"
详细说明首先使用循环来转换字符串中的数组。
$id_list;
foreach ($unique_user_id_list as $key => $value) {
if($check == 1){
$id_list = 'FIELD ( Id'.',' . "'". $value. "'";
$check =2;
}
else{
$id_list = $id_list . "," . "'". $value. "'";
}
}
$id_list = $id_list . ")";
上面的循环将生成"FIELD(id, '2', '3', '7', '13')"
完整查询我如何使用它如下。
$users = $this->Users->find('all',[
'contain' => [],
'conditions'=>['Id IN' => $unique_user_id_list],
'order'=> $id_list
]);
答案 1 :(得分:0)
尝试按如下方式格式化订单声明
->order(['users.Id'=>'ASC']);