Selezione SQL di utenti per metadati

11 ott 2011, 17:02:24
Visualizzazioni: 15.7K
Voti: 5

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!

sql
2
Commenti

Potresti avere più fortuna sul sito Database Administrators di Stack Exchange.

Chris_O Chris_O
11 ott 2011 18:41:33

@Chris_O Non sono d'accordo. Sebbene sia pertinente alle operazioni generiche sui database, copre anche parti dell'API di WordPress come mostrato dalla risposta di kaiser qui sotto. Penso che dovrebbe rimanere.

EAMann EAMann
12 ott 2011 01:05:35
Tutte le risposte alla domanda 2
3

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.

11 ott 2011 18:43:24
Commenti

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!

Gyro Gyro
11 ott 2011 23:52:58

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.

EAMann EAMann
12 ott 2011 01:04:23

Questo è stato molto utile per me per trovare gli utenti che sono clienti woocommerce poiché queste informazioni sono impostate nel campo wp_capabilities. Grazie!

Denoteone Denoteone
19 ago 2014 10:37:25
0
-1

Esiste una classe (query) integrata nel core:

new WP_User_Query;

// 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.

11 ott 2011 19:22:29