问题:我正在编写一个涉及对列执行count()操作的查询,但会返回字符串格式的计数。结果,前端的分类搞砸了。
详细信息: 我在Zend中编写以下查询:
$select = $this->select()
->setIntegrityCheck(false)
->from(array('s' => 'student'),
array('s.id',
'start_date' => new Zend_Db_Expr("date(s.start_date)"),
))
->joinLeft(array('ps' => 'pstudent'),
's.id = ps.st_id',
array('pscount' => new Zend_Db_Expr('count(ps.st_id)') ))
->where('ps.status = "phd"');
$result = $this->getAdapter()->fetchAll($select);
此查询使用pscount
向我返回Zend_Db_Expr (count(ps.st_id))
。
在代码的稍后阶段,我将此数据编码为json格式并返回到前端。
由于来自db的数据以字符串形式出现(即pscount
是一个字符串),当我在网格的pscount
列的前端排序时,我得到以下序列。
1
10个
100个
11个
12个
13
但是,我希望它按数值排序,因此输出为:
1
10个
11个
12个
13个
100
我尝试将Zend_Db_Expr
写为new Zend_Db_Expr('cast(count(ps.study_id) as signed)')
,但结果没有变化。
由于应用程序要求,我无法在查询中使用 订单 。
唯一的另一种选择是如果我遍历$result
然后在php代码中进行(int)
类型转换。然而,这是最后一个选择。
我更喜欢在mysql查询中执行此操作,以便我不必不必要地遍历结果。
非常感谢任何帮助。
答案 0 :(得分:0)
只需将其作为字符串数组使用sort($someArray, SORT_NUMERIC)
即可。这会将它们分类为数字。
如果需要对复杂对象进行排序,请使用带有比较功能的usort()。
我不相信你可以在不使用order by
的情况下在mysql中订购结果。