2010-07-27 3 views
1

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

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

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

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

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

Mazy

ответ

0

Вы можете сделать это с custom query string, что каст строку мета данные:

$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 
+0

он по-прежнему не работает для меня :( он все еще приходит в виде строки и давая мне результат: 21300> 2750> 25700> 40000> 30000> 20000> 25000> 5000 Это должно быть: 40000> 30000> 25700> 25000> и т. Д. – mazy

+0

Хмммм, как насчет того, чтобы вы давали CAST() попробовать в предложении ORDER BY (http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html#function_cast). Что-то вроде 'ORDER BY CAST (wpostmeta.meta_value AS DECIMAL) DESC'. – Pat

Смежные вопросы