Упорядочить по meta_value в запросе SQL - PullRequest
1 голос
/ 25 апреля 2019

Я хочу заказать свой результат по количеству лайков.Мне нужно использовать запрос SQL вместо новых аргументов запроса.

Внутри обычного запроса я должен использовать 'orderby' => 'meta_value_num', но поскольку это запрос SQL, я использую ORDER BY {$wpdb->prefix}postmeta.meta_value DESC;

Этовот что я попробовал:

$test = $wpdb->get_results ( "
SELECT * 
FROM  {$wpdb->prefix}postmeta
WHERE post_id LIKE '$get_the_ID_090909%' AND {$wpdb->prefix}postmeta.meta_key = '_liked' AND {$wpdb->prefix}postmeta.meta_value > 0
ORDER BY {$wpdb->prefix}postmeta.meta_value DESC;
        " );
        echo ' '.$test[0]->meta_value; // 2
        echo ' '.$test[1]->meta_value; // 14
        echo ' '.$test[2]->meta_value; // 10

Правильный порядок должен быть:

14
10
2

Обратите внимание, что если я использую «ASC», то порядок 10, 14, 2 И если яизменить подобное число, это меняет положение.Иногда это правильный порядок в зависимости от количества лайков

var_dump ():

 array(3) { [0]=> object(stdClass)#7998 (4) { ["meta_id"]=> string(3) "756" ["post_id"]=> string(12) "179090909185" ["meta_key"]=> string(6) "_liked" ["meta_value"]=> string(1) "2" } [1]=> object(stdClass)#8000 (4) { ["meta_id"]=> string(3) "696" ["post_id"]=> string(12) "179090909176" ["meta_key"]=> string(6) "_liked" ["meta_value"]=> string(2) "14" } [2]=> object(stdClass)#8001 (4) { ["meta_id"]=> string(3) "697" ["post_id"]=> string(12) "179090909170" ["meta_key"]=> string(6) "_liked" ["meta_value"]=> string(2) "10" } }

1 Ответ

3 голосов
/ 25 апреля 2019

Столбец meta_value является varchar, что означает, что все значения (включая числа) сортируются как строки.

При сортировке приведите столбец как INT:

ORDER BY CAST({$wpdb->prefix}postmeta.meta_value AS UNSIGNED) ASC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...