問題: 列に対する 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
asを書いてみましnew Zend_Db_Expr('cast(count(ps.study_id) as signed)')
たが、結果に変化はありません。アプリケーションの要件により、クエリでもorder byを使用できません。他の唯一のオプションは、 をトラバースしてからphp コードで型変換を$result
行う場合です。(int)
ただし、それは最後のオプションです。
不必要に結果をたどる必要がないように、mysqlクエリでこれを行うことをお勧めします。
どんな助けでも本当に感謝しています。