2014-01-23 39 views
0

我有一個datamapper orm和codeigniter的問題。通過數組對數據映射器ORM結果排序

我有一個人名字的數組:

$names = array('john t', 'alex f', 'martin a'); 

現在,我想誰擁有該名稱的人:

$persons = new Person(); 
$persons->where_in('name', $names); 
$persons->get(); 

我的問題是我怎麼能進行排序Person對象喜歡我數組? 如果我呼應人,排序不僅僅是我的數組。

我知道有到ORDER_BY列例如$persons->order_by('id DESC');

TY的方式。

+0

你想根據你的數組進行排序嗎?或以任何順序如asc或desc? –

+0

我想根據我的數組進行排序。 :)不訂購 –

+0

然後,你必須編寫自己的代碼。我想是這樣。 –

回答

0

如果你在MySQL中,你可以使用FIELD()方法對於這一點,在SQL:

select * from persons where name in ('foo', 'bar', baz') order by field(name, 'bar', 'baz', 'foo'); 

可以使用case帶着一幫when太多,如果你是對的Postgres或其他DBMS,看到一些想法here

但codeigniter中的order_by方法(datamapper只是將調用轉發給它)將嘗試轉義它的參數,因此您最終會遇到sql錯誤。你可以通過直接操縱字符串順序存儲的數組來解決這個問題。

// before the ->get(); 
$person->db->ar_orderby[] = "field(name, 'john t', 'alex f', 'martin a')"; 

你必須非常小心地逃離這裏輸入,並因爲你沒有從框架幫助了相匹配的列名(在本例中name)。