Pregunta

Estoy tratando de mostrar todos los usuarios en base a un meta_key llamados "puntos" de esta manera:

$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()}"));

Los usuarios se muestran correctamente, pero el orden no está funcionando, meta_value es igual a un número de 1 a 8. Entonces, ¿cómo debería hacerlo funcionar? Gracias.

PD: Esta es la salida:

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

Así que creo que está ordenados por ID.

¿Fue útil?

Solución

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 Firmado) será acogida contra LONGTEXT a INT. Funciona ahora.

Otros consejos

Si no estoy completamente equivocado acerca de MySQL, hay que añadir los meta_key = 'puntos' a la cláusula where. Reescribir la consulta a:

  

SELECT user_id, meta_value
  DESDE $ wpdb-> UserMeta
  DONDE meta_key =
'puntos'   ORDER BY DESC meta_value
  LÍMITE $ límite de desplazamiento {$ paginate-> offset ()}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top