2010-07-27 8 views
1

Comment puis-je trier numériquement les données de champ personnalisées qui sont stockées sous forme de chaîne. Je ne peux pas le changer en base de données.Wordpress: ordre de tri par champ personnalisé numériquement

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

C'est ce que je me sers, mais il est le tri comme chaîne comme cela est stocké sous forme de chaîne aussi bien.

Quelqu'un peut-il me dire comment puis-je le convertir en numérique sans changer dans la base de données?

Merci d'avance.

Mazy

Répondre

0

Vous pouvez le faire avec une custom query string qui castes la chaîne méta-données:

$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 
"; 

Si votre valeur méta inclut un signe dollar (123,45 $), vous pouvez modifier la clause ORDER BY pour enlever il:

ORDER BY ABS(SUBSTRING(wpostmeta.meta_value, 2)) DESC 
+0

il ne fonctionne toujours pas pour moi :( il est encore à venir sous forme de chaîne et de me donner de résultat comme ceci: 21300> 2750> 25700> 40000> 30000> 20000> 25000> 5000 Il devrait être: 40000> 30000> 25700> 25000> et ainsi de suite .... – mazy

+0

Hmmmm, que diriez-vous d'essayer CAST() dans la clause ORDER BY (http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html#function_cast). Quelque chose comme 'ORDER BY CAST (wpostmeta.meta_value AS DECIMAL) DESC'. – Pat

Questions connexes