将查询返回的数据库列值排序为数值

时间:2012-08-15 19:14:55

标签: php mysql zend-db

问题:我正在编写一个涉及对列执行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查询中执行此操作,以便我不必不必要地遍历结果。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

只需将其作为字符串数组使用sort($someArray, SORT_NUMERIC)即可。这会将它们分类为数字。

如果需要对复杂对象进行排序,请使用带有比较功能的usort()。

我不相信你可以在不使用order by的情况下在mysql中订购结果。