2016-02-28 58 views
2

下面是我的代碼,它的確切順序提取數據,我想拉基於序列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> 

回答

2

這個想法是通過它們在數組中的位置排序結果。在這種情況下,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 DEMO here

編輯:

我在建立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')) 
    )); 
+0

我需要在CakePHP的代碼沒有MySQL代碼PLZ。另外我嘗試了FIND_IN_SET,我有一個錯誤調用未定義的函數FIND_IN_SET() – Dani

+0

我不知道'蛋糕php'。看看這個[post](http://stackoverflow.com/questions/9545045/how-to-use-find-in-set-in-cakephp-find-method)。它可能會幫助你。 – 1000111

+0

請查看我答案中的編輯部分。它也可能有幫助。 @Dani – 1000111