问题:我正在编写一个查询,该查询涉及对列的 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
asnew Zend_Db_Expr('cast(count(ps.study_id) as signed)')
但结果没有变化。由于应用程序要求,我也不能在查询中使用order by 。唯一的其他选择是,如果我遍历$result
然后(int)
在 php 代码中进行类型转换。然而,这是最后的选择。
我宁愿在 mysql 查询中执行此操作,这样我就不必不必要地遍历结果。
非常感谢任何帮助。