我有一张标题为'的表格。字段,我试图获取此表中的所有行,并按标题ASC排序。我正在测试的四个记录有标题:
另一项测试
我的新页面
NEW
AAA
这也是返回行的顺序不正确。 ' AAA'应该在列表的顶部。我认为问题在于大小写字符。
我想通过LOWER(标题)订购,而不仅仅是标题,但我在FuelPHP中遇到问题。
我用来选择记录的代码是:
$pages = Model_pages::find('all', array(
'order_by' => array('title' => 'asc')
));
如何将代码设置在订单商品上方,无论他们的情况如何'?
编辑:
@Uru,感谢您的反馈:)我尝试了以下代码,所有变体都会导致SQL或PHP错误:
$pages = Model_pages::find('all', array(
'order_by' => \DB::expr('LOWER(title) ASC')
));
$pages = Model_pages::find('all', array(
'order_by' => \DB::expr('LOWER(title)')
));
$pages = Model_pages::find('all', array(
'order_by' => \DB::expr('LOWER(title) ASC')
));
$pages = Model_pages::find('all', array(
'order_by' => array( \DB::expr('LOWER(title)') )
));
$pages = Model_pages::find('all', array(
'order_by' => array( \DB::expr('LOWER(title) ASC') )
));
$pages = Model_pages::find('all', array(
'order_by' => array( \DB::expr('LOWER(title)') => 'ASC' )
));
答案 0 :(得分:0)
您应该可以使用DB::expr('LOWER(title)')
来转义表达式并使用它来代替'title'
。
如果这不起作用且documentation中没有任何内容,则目前不支持此功能。
答案 1 :(得分:0)
问题在于MySQL中的数据库排序规则,将其更改为utf8_general_ci解决了问题。感谢Harro在FuelPHP论坛上回答这个问题:
您使用的是MySQL吗?如果是这样,您使用什么整理顺序 你的桌子?
MySQL作为整理序列与“ci”结尾(如 utf8_general_ci),“不区分大小写”。这意味着“aaa”和 “AAA”的排序相同。
如果您想知道SQL的执行情况,请将“profiling”设置为 在config.php中为true,并在数据库中将其设置为true 定义,在/db.php。
你的右下角会有一个黑色的黑色探测器 页面,如果你点击它,探查器将打开,它将显示 你执行的所有SQL查询。
就我所见,你的ORM代码没有任何问题,但是我 从不使用数组表示法。我会用(这应该生成 相同的SQL):
$ pages = Model_pages :: query() - > order_by('title','asc') - > get();
对于遇到同一问题的人,可以在此处找到完整的主题:
http://fuelphp.com/forums/discussion/13226/fuelphp039s-orm-isn039t-ordering-items-correctly