3

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

非常感谢任何帮助。

4

1 回答 1

0

只需将其作为字符串数组获取并使用sort($someArray, SORT_NUMERIC). 这将对它们进行排序,就好像它们是数字一样。

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

我不相信您可以在不使用order by.

于 2012-08-15T19:18:38.850 回答