Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 当想要排序的字段不在SQL中时,如何对jqGrid进行排序?_Php_Sorting_Jqgrid - Fatal编程技术网

Php 当想要排序的字段不在SQL中时,如何对jqGrid进行排序?

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");

当我们使用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之前

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

是的,我必须。因为真正的逻辑是复杂的,所以我使用上面的例子,但本质是相同的,所以我不能更改数据库。第二种解决方案似乎有一个问题:分页时无法正确排序。当您尝试添加分页时会发生什么情况?我看不出有什么问题。