Как отсортировать jqGrid, когда искомое отсортированное поле отсутствует в SQL? - PullRequest
0 голосов
/ 13 июля 2011

Когда мы используем 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';
   ...
   ...
}

Теперь вопрос:

если я сортирую jqGrid по ASC, он будет отображаться как Diane Kerwin, Brian Lane, так как Kerwin раньше Lane.

Как отсортировать поля типа Brian Lane, Diane Kerwin по ASC?

1 Ответ

0 голосов
/ 13 июля 2011

Предпочтительное решение

Похоже, что только фамилии хранятся в базе данных.Чтобы иметь возможность сортировки по имени в запросе SQL, вам необходимо обновить поля name в таблице items, чтобы они содержали как имена, так и фамилии.Это было бы намного лучше - хранение отдельного набора данных, встроенного в ваш код, вероятно, вызовет проблемы в какой-то момент позже.


Если вам необходимо:

Если это невозможность и вы должны сохранить операторы 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']); });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...