当我们使用jgGrid时,像这样:
get_items.php =>
$SQL = "SELECT * FROM items ORDER BY $sidx $sord LIMIT $start , $limit";
//$sidx is the index row.
//ie. $sidx = 'name';
$result = $mysql->query( $SQL );
header("Content-type: text/xml;charset=utf-8");
$s = "<?xml version='1.0' encoding='utf-8'?>";
...
//balah balah
...
while ( $row = $mysql->fetch_array( $result ) ) {
...
//Note the getName method.
$s .= "<cell>". getName($row['name']))."</cell>";
...
};
echo $s;
function getName ( name ) {
if ( name == 'Lane' ) return 'Brian Lane';
if ( name == 'Kerwin' ) return 'Diane Kerwin';
...
...
}
现在的问题是:
如果我按照ASC对jqGrid进行排序,则会Diane Kerwin, Brian Lane
显示为Kerwin
Lane
之前的Brian Lane, Diane Kerwin
。
如何按ASC对{{1}}等字段进行排序?
答案 0 :(得分:0)
看起来只有姓氏存储在数据库中。为了能够在SQL查询中按名字排序,您需要更新name
表中的items
字段以包含名字和姓氏。这样会好得多 - 保持代码中嵌入一个单独的数据集可能会在以后某些时候引起问题。
如果这不可能,并且您必须为每个名称保留if
语句,则可以映射结果集以获取名称然后排序。 (以下示例需要PHP&gt; = 5.3。)
$SQL = "SELECT * FROM items ORDER BY $sidx $sord LIMIT $start , $limit";
$result = $mysql->query($SQL);
$rows = array();
while ( $row = $mysql->fetch_array($result) ) {
switch ( $row['name'] ) {
case 'Lane': $row['name'] = 'Brian Lane';
case 'Kerwin': $row['name'] = 'Diane Kerwin';
}
array_push($rows, $row);
}
usort($rows, function($a, $b) { return strcmp($a['name'], $b['name']); });