2010-11-23 13 views
3

Je suis en train d'afficher tous les utilisateurs en fonction d'un meta_key appelé « points » comme ceci:

$wpdb->get_col($wpdb->prepare(" 
SELECT user_id, meta_key = 'points', meta_value 
FROM $wpdb->usermeta 
ORDER BY meta_value DESC 
LIMIT $limit OFFSET {$paginate->offset()}")); 

Les utilisateurs sont affichées correctement, mais l'ordre ne fonctionne pas, meta_value est égal à un nombre compris entre 1 et ∞. Alors, comment devrais-je le faire fonctionner? Merci.

PS: Ceci est la sortie:

Array ([0] => 1 [1] => 2 [2] => 4) 

Je crois donc est commandé par ID.

Répondre

6
SELECT user_id, meta_value FROM $wpdb->usermeta WHERE meta_key = 'points' ORDER BY CAST(meta_value AS SIGNED) DESC LIMIT 

CAST (meta_value AS SIGNE) convertiront de LONGTEX T à INT. Ça fonctionne maintenant.

1

Si je ne me trompe pas complètement à propos de mysql, vous devez ajouter le meta_key = 'points' à la clause where. Réécrivez la requête à:

SELECT user_id, meta_value
DE wpdb- $> usermeta
OÙ meta_key = 'Points
ORDER BY meta_value DESC
LIMITE limite de $ OFFSET {paginate- $> décalage()}

+0

Oui, c'est correct mais le tri ne fonctionnera pas, car meta_value est réglé sur LONGTEXT alors ... Je suis à la recherche d'une solution dès maintenant. Si vous en connaissez un, faites le moi savoir. Merci! –