2017-02-16 12 views
0

Изучая проблему сопоставления базы данных, я заметил некоторое довольно странное поведение порядка. Основываясь на фактическом запросе, существует разница в позиции order by, которая дает разные результаты при использовании meta_query, а не только аргумента meta_key.Wordpress: непредвиденная разница в заказе с meta_query против meta_key

В моем случае у меня есть специальная meta_key для lastnames только для этой цели.

'meta_key' => 'lastname', 
'orderby' => 'meta_value', 
'order' => 'ASC' 

Это приводит следующий порядок по статье, которая работает, как ожидалось:

ORDER BY wp_postmeta.meta_value ASC 

С другой стороны, используя

'meta_query' => array(
    'lastname_clause' => array(
     'key' => 'lastname', 
     'compare' => 'EXISTS' 
    ) 
), 
'orderby' => array(
    'lastname_clause' => 'ASC' 
) 

производит

ORDER BY CAST(wp_postmeta.meta_value AS CHAR) ASC 

Это ожидаемое поведение р? Есть ли что-то, что я должен изменить в своих аргументах запроса при использовании meta_query?

ответ

0

lastname_clause недействителен. Попробуйте это:

'meta_key' => 'lastname', 
'orderby' => array(
    'meta_value' => 'ASC', 
    'title' => 'DESC' // or whatever you want to sort as second 
) 

Подробнее об этом ->Orderby Parameters

+0

Но. См. Https://make.wordpress.org/core/2015/03/30/query-improvements-in-wp-4-2-orderby-and-meta_query/ – and