【问题标题】:How to sort jqGrid when the wanted sorted field doesn't in SQL?当想要的排序字段不在 SQL 中时,如何对 jqGrid 进行排序?
【发布时间】:2011-07-13 04:45:01
【问题描述】:

当我们使用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,因为 KerwinLane 之前。

Brian Lane, Diane Kerwin等字段如何按ASC排序?

【问题讨论】:

    标签: php sorting jqgrid


    【解决方案1】:

    首选解决方案

    看起来只有姓氏存储在数据库中。为了能够在 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']); });
    

    【讨论】:

    • 是的,我必须。因为真正的逻辑很复杂所以我用上面的例子,但本质是一样的所以我不能改变数据库。第二种方案似乎有问题:分页时无法正确排序。
    • 当您尝试添加分页时会发生什么?我看不出问题。
    猜你喜欢
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 2017-10-06
    相关资源
    最近更新 更多