Wordpress $ wpdb-> usermeta ordina per meta_value
Domanda
Sto cercando di visualizzare tutti gli utenti sulla base di un meta_key chiamato "punti" in questo modo:
$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()}"));
Gli utenti vengono visualizzati correttamente, ma l'ordine non funziona, meta_value è pari ad un numero da 1 a ∞. Così, come devo farlo funzionare? Grazie.
PS: Questa è l'uscita:
Array ( [0] => 1 [1] => 2 [2] => 4 )
Quindi credo sia ordinato da ID.
Soluzione
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 Firmato) si occulta da LONGTEXT a INT. Ora funziona.
Altri suggerimenti
Se non sarò completamente sbagliato su MySQL, è necessario aggiungere le meta_key = 'punti' per la clausola dove. Riscrivere la query per:
Selezionare id_utente, meta_value
FROM $ wpdb-> usermeta
DOVE meta_key =
'punti' ORDER BY DESC meta_value
LIMITE $ limite di OFFSET {$ paginate-> offset ()}