2017-10-07 132 views
0

我正在使用LIKE查询,但specialist_id的订单更改时表示没有找到记录, 如果specialist_id数组有[1,2,3],那么所有具有三种特色的用户应该在结果中无论顺序如何,顺序数组可能有[3,2,1]或[2,1,3],但具有这三种特色的用户应该在结果中,这里是我的代码,其中LIKE查询:如何在cakephp中使用IN查询来查找多个值

$field = $this->User->find(
    'all', array(
     'conditions'=>array(
      'User.specialist_id LIKE' =>'%'.$value.'%', 
      'User.role'=>'careproviderRole', 
      'User.gender'=>$this->request->data['gender']) 
    ) 
); 

foreach ($field as $key => $value) 
{ 
    $field[$key]['Specialist'] = $user; 
} 

我也试图与FIND_IN_SET

$field = $this->User->find(
    'all', array(
     'conditions' => array(
      'User.role' => 'careproviderRole', 
      'FIND_IN_SET(\''.$this->request->data['specialist_id'].'\', User.specialist_id)') 
    ) 
); 
+0

请澄清:是users.specialist_id字符串ORA整数?看起来你正在存储一个数组在你的领域。如果是这样,这是一个糟糕的数据库设计您应该创建一个表(即users_speciaists)来存储与每个用户关联的专家,以便您可以在查询 – arilia

回答

0

当您使用LIKE和掩码'%some%'时,它会找到子字符串为'some'的所有结果。

如果您需要从表(1,2或3)获取一些特定的ID,请使用sql运算符IN

例子:

SELECT `specialist_id` FROM `User` WHERE `specialist_id` IN (1,2,3); 

在你的代码,这将是:

$field = $this->User->find(
'all', array(
    'conditions'=>array(
     'User.specialist_id' => $arrayOfSpecialistIds, 
     'User.role'=>'careproviderRole', 
     'User.gender'=>$this->request->data['gender']) 
) 
+0

中使用'matching()',但是这个简单的sql查询如何在cakephp中使用它? – user8736517

+0

已更新的答案。 – zen

+0

实际上表中的单个记录字段有多个值,如specialist_id列中有1,2,3个ID,意味着userabc有这3个专业。 现在,当选择多个专业假设[3,2,1],那么所有这三种类型的专业用户必须在结果,您提供的解决方案仍然不工作 – user8736517