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.

È stato utile?

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 ()}

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top