2017-10-07 136 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