Selectare SQL a utilizatorilor după metadate
Salut! Încerc să selectez doar utilizatorii cu un anumit rol, folosind următoarea declarație 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
Totuși, întoarce întregul tabel. Ce fac greșit?
PS: Trebuie să fie o interogare SQL deoarece fac asta în phpMyAdmin pentru a exporta datele în CSV.
Mulțumesc anticipat!

Verifică din nou sintaxa SQL. Se pare că vrei să faci un JOIN
... Dar nu construiești corect interogarea.
Ar trebui să arate mai degrabă aș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
Trebuie să specifici interogării cum relaționezi metadatele utilizatorului cu utilizatorul.
De asemenea, observă că folosesc $wpdb->
în loc de wp_
. Acest lucru este important dacă intenționezi să folosești această interogare într-un plugin pe un site cu un prefix de bază de date diferit de "wp". Totuși, dacă rulezi direct în SQL, ar trebui să revii la prefixul obișnuit.

Când am schimbat == cu = și am corectat ortografia cuvântului 'capabilities', a funcționat perfect. Mulțumesc EAMann! Deoarece folosesc acest cod în phpmyadmin, nu am nevoie de $wpdb-> pentru a specifica prefixul tabelei. Dar pentru cei care implementează acest cod în php, este cu siguranță soluția recomandată!

Scuze, am scris asta în grabă în timp ce depanam o serie de operații de egalitate în .Net ... ==
funcționează mai bine în acel mediu, așa că am introdus-o din greșeală. Totul a fost corectat mai sus.

Există o clasă (de interogare) integrată în nucleu:
// Exemplu
$all_subscribers = new WP_User_Query( array( 'role' => 'subscriber' ) );
Acest lucru permite apoi iterarea prin obiectele de utilizator:
// Exemplu
foreach ( $all_subscribers as $subscriber )
{
echo $subscriber->display_name;
// Verifică obiectul:
var_dump( $subscriber );
}
Pentru mai multe exemple sau pentru interogarea utilizatorilor după alte câmpuri, consultă codex-ul.
