Опция 'db'

Опция db указывает, каким образом колонка в jqGrid соотносится с базой данных.

Если db явно не определена, то считается, что имя колонки из $this→cols совпадает с именем колонки в базе данных. Это наиболее частый случай для простых запросов.

Если в запросе используется JOIN, то в db необходимо указывать имя колонки вместе с именем таблицы. Например:

c.field

Также разрешается использовать SQL-выражения, функции, условные конструкции. Например:

ROUND(field * 100)
CASE WHEN f.field > 5 THEN f.field * 2 ELSE f.field / 2 END

При соблюдении некоторых условий, можно использовать даже aggregate-функции и sub-select'ы. Например:

sum(c.field)
(SELECT discount FROM tbl_customer WHERE id=c.id)

Все возможные варианты использования db:

$this->query = "SELECT {fields} FROM tbl_order o, tbl_customer c WHERE c.id=o.customer_id AND {where}";
 
$this->cols = array(
	'id'          => array('label' => 'ID',
                               "db"    => "o.id",                    //table_alias.field
			       ...
			       ),
 
	'first_name'  => array('label' => 'First name', 
			       "db"    => "tbl_customer.first_name", //table_name.field
			       ...
				),
 
	'last_name'   => array('label' => 'Last name',               //db not set - assuming "last_name"
			       'width' => 25,                        //no problem if field is unique among joined tables
			       ...
				),
 
	'full_name'   => array('label' => 'Full name',
                               "db"    => "CONCAT(c.first_name, ' ', c.last_name)", //function call
			       ...
				),
 
	'discount'    => array('label' => 'Discount',
			       "db"    => "o.discount * 100",        //expression
			       ...
			       ),
 
	'is_vip'      => array('label' => 'VIP',
			       "db"    => "CASE WHEN o.discount > 0.15 AND c.group != 'black' THEN 1 ELSE 0 END",        
			       ...                                    //conditional expression
			       ),
 
        'reserve_cnt' => array('label' => 'Reserve',
                               "db"    => "(SELECT sum(cnt_reserve) FROM tbl_reserve WHERE order_id=o.id)",
                               ...                                    //sub-select
                               ),
);

Запрос rows

SELECT 
 
      o.id
    , tbl_customer.first_name
    , last_name
    , CONCAT(c.first_name, ' ', c.last_name) AS full_name
    , discount * 100 AS discount
    , CASE WHEN o.discount > 0.15 AND c.user_group != 'black' THEN 1 ELSE 0 END AS is_vip
    , (SELECT SUM(cnt_reserve) FROM tbl_reserve WHERE order_id=o.id) AS reserve_cnt
 
FROM tbl_order o, tbl_customer c WHERE c.id=o.customer_id AND TRUE
ORDER BY id ASC
LIMIT 30 OFFSET 0

На других языках