Selezione SQL di utenti per metadati
Ciao, sto cercando di selezionare solo gli utenti con un ruolo specifico, usando la seguente istruzione SQL...
SELECT DISTINCT ID, u.user_login, u.user_nicename, u.user_email
FROM wp_users u, wp_usermeta m
WHERE m.meta_key = 'wp_capabilities'
AND m.meta_value LIKE '%supplier%'
ORDER BY u.user_registered
Tuttavia, restituisce l'intera tabella. Cosa sto sbagliando?
PS: deve essere una SELECT SQL perché sto eseguendo questa operazione in phpMyAdmin per esportare i dati in CSV.
Grazie in anticipo!

Controlla attentamente la tua sintassi SQL. Sembra che tu voglia fare un JOIN
... Ma non stai costruendo la query correttamente.
Dovrebbe essere più simile a:
SELECT u.ID, u.user_login, u.user_nicename, u.user_email
FROM $wpdb->users u
INNER JOIN $wpdb->usermeta m ON m.user_id = u.ID
WHERE m.meta_key = 'wp_capabilities'
AND m.meta_value LIKE '%supplier%'
ORDER BY u.user_registered
Devi specificare alla query come stai collegando i metadati dell'utente all'utente stesso.
Nota inoltre che sto usando $wpdb->
invece di wp_
. Questo è importante se prevedi di utilizzare questa query in un plugin su un sito con un prefisso del database diverso da "wp". Tuttavia, se stai eseguendo direttamente in SQL, dovresti tornare al prefisso normale.

Quando ho cambiato il == con = e corretto l'ortografia di 'capabilities' ha funzionato perfettamente. Grazie EAMann! Dato che sto usando questo in phpmyadmin non ho bisogno di $wpdb-> per specificare il prefisso della tabella. Ma per chiunque stia codificando questo in php è decisamente la strada da percorrere!

Scusa, ho scritto questo in fretta mentre debugavo un po' di operazioni di uguaglianza in .Net... ==
funziona meglio in quel mondo, quindi l'ho messo per errore. Tutto è stato corretto sopra.

Esiste una classe (query) integrata nel core:
// Esempio
$all_subscribers = new WP_User_Query( array( 'role' => 'subscriber' ) );
Questo permette poi di iterare attraverso gli oggetti utente:
// Esempio
foreach ( $all_subscribers as $subscriber )
{
echo $subscriber->display_name;
// Controllo oggetto:
var_dump( $subscriber );
}
Per ulteriori esempi, o per interrogare gli utenti tramite altri campi, consultare il codex.
