Php 当想要排序的字段不在SQL中时,如何对jqGrid进行排序?
当我们使用jgGrid时,如下所示:Php 当想要排序的字段不在SQL中时,如何对jqGrid进行排序?,php,sorting,jqgrid,Php,Sorting,Jqgrid,当我们使用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");
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之前
如何按ASC对Brian Lane、Diane Kerwin等字段进行排序?首选解决方案
看起来数据库中只存储了姓氏。为了能够在SQL查询中按名字排序,您需要更新items表中的name字段,以包含名字和姓氏。这会更好——在代码中嵌入一个单独的数据集可能会在以后的某个时候导致问题
如果必须:
如果不可能,并且必须为每个名称保留If语句,则可以映射结果集以获取名称,然后进行排序。下面的示例要求PHP>=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']); });
是的,我必须。因为真正的逻辑是复杂的,所以我使用上面的例子,但本质是相同的,所以我不能更改数据库。第二种解决方案似乎有一个问题:分页时无法正确排序。当您尝试添加分页时会发生什么情况?我看不出有什么问题。