Wordpress: порядок сортировки по пользовательскому полю в числовом порядке

Как я могу отсортировать данные настраиваемого поля в числовом виде, которые хранятся в виде строки. Я не могу изменить его в базу данных.

query_posts($query_string. '&orderby=meta_value&meta_key=price&order=DESC' );

Это то, что я использую, но он сортирует его как строку, поскольку она также хранится как строка.

Может ли кто-нибудь сказать мне, как я могу преобразовать его в числовое значение, не меняя базу данных?

Заранее спасибо.

Мази


person mazy    schedule 27.07.2010    source источник


Ответы (1)


Вы можете сделать это с помощью собственной строки запроса, которая преобразует метаданные строки:

$querystr = "
    SELECT wposts.*
    FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta
    WHERE wposts.ID = wpostmeta.post_id
    AND wpostmeta.meta_key = 'price' 
    AND wposts.post_type = 'post'
    ORDER BY ABS(wpostmeta.meta_value) DESC
";

Если ваше мета-значение включает знак доллара (123,45 доллара США), вы можете настроить ORDER BY, чтобы удалить его:

    ORDER BY ABS(SUBSTRING(wpostmeta.meta_value, 2)) DESC
person Pat    schedule 27.07.2010
comment
У меня это все еще не работает :( оно все еще приходит в виде строки и дает мне такой результат: 21300 › 2750 › 25700 › 40000 › 30000 › 20000 › 25000 › 5000 Должно быть: 40000 › 30000 › 25700 › 25000 › и так далее.... - person mazy; 27.07.2010
comment
Хмммм, как насчет того, чтобы попробовать CAST() в предложении ORDER BY (dev.mysql.com/doc/refman/5.0/en/). Что-то вроде ORDER BY CAST(wpostmeta.meta_value AS DECIMAL) DESC. - person Pat; 27.07.2010