我遇到了datamapper orm和codeigniter的问题。
我有一个人名的数组:
$names = array('john t', 'alex f', 'martin a');
现在我想得到所有拥有此名字的人:
$persons = new Person();
$persons->where_in('name', $names);
$persons->get();
我的问题是如何对像我的数组这样的人物对象进行排序? 如果我回应人,那么排序就不是我的数组了。
我知道有一种方法可以通过order_by列来实现$persons->order_by('id DESC');
TY。
答案 0 :(得分:0)
如果您使用的是MySQL,则可以在SQL中使用FIELD()
方法:
select * from persons where name in ('foo', 'bar', baz') order by field(name, 'bar', 'baz', 'foo');
如果您使用postgres或其他dbms,也可以将case
与when
一起使用,请参阅一些提示here。
然而,codeigniter中的order_by
方法(数据映射器只是将调用转发给它)将尝试转义它的参数,因此最终会出现sql错误。您可以通过直接操作数组来解决这个问题,其中按字符串顺序存储顺序。
// before the ->get();
$person->db->ar_orderby[] = "field(name, 'john t', 'alex f', 'martin a')";
您需要非常小心地在此处转义输入并匹配列名称(在示例name
中),因为您不再需要框架的帮助。