如果在SQL中没有想要的排序字段时如何对jqGrid进行排序?

时间:2011-07-13 04:45:02

标签: 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");
$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}}等字段进行排序?

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']); });