SQL запрос для выборки пользователей по метаданным
Привет, я пытаюсь выбрать пользователей только с определенной ролью, используя следующий 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
Однако, он возвращает всю таблицу. Что я делаю не так?
P.S. Это должен быть именно SQL запрос, так как я делаю это в phpMyAdmin для экспорта данных в CSV.
Заранее спасибо!

Проверьте синтаксис вашего SQL-запроса. Похоже, вы хотите выполнить JOIN
... Но ваш запрос составлен неправильно.
Он должен выглядеть примерно так:
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
Вам нужно указать запросу, как связывать метаданные пользователя с самим пользователем.
Также обратите внимание, что я использую $wpdb->
вместо wp_
. Это важно, если вы планируете использовать этот запрос в плагине на сайте с префиксом базы данных, отличным от "wp". Однако если вы выполняете запросы напрямую в SQL, следует вернуть стандартный префикс.

Когда я заменил == на = и исправил опечатку в слове 'capabilities', все заработало как надо. Спасибо, EAMann! Поскольку я использую это в phpmyadmin, мне не нужно указывать префикс таблицы через $wpdb->. Но для тех, кто встраивает этот код в php, это определенно правильный подход!

Извините, я написал это наспех, пока отлаживал кучу операций сравнения в .Net ... ==
там работает лучше, поэтому я по ошибке использовал его. Теперь все исправлено выше.

В ядре WordPress есть встроенный (query-)класс:
// Пример
$all_subscribers = new WP_User_Query( array( 'role' => 'subscriber' ) );
Это позволяет перебирать пользовательские объекты:
// Пример
foreach ( $all_subscribers as $subscriber )
{
echo $subscriber->display_name;
// Проверим объект:
var_dump( $subscriber );
}
Для дополнительных примеров или запросов пользователей по другим полям, обратитесь к кодексу.
