Я пытаюсь создать один запрос для получения информации из основной таблицы (пользовательской таблицы WordPress) и пользовательской мета-таблицы.
Если вы не знакомы с архитектурой WP DB: wp_users содержит базовую информацию о пользователях и их идентификаторах, wp_usermeta содержит идентификатор, meta_key и meta_value.
Допустим, я хочу получить всех пользователей, которые имеют определенные meta_keys и meta_values. Это мой запрос (сгенерированный через PHP на основе доступных meta_keys):
SELECT ID,
user_email,
user_login,
first_name.meta_value as first_name,
last_name.meta_value as last_name,
phone_number.meta_value as phone_number,
wp_capabilities.meta_value as wp_capabilities
FROM wp_users,
(select * from wp_usermeta where meta_key = 'first_name') as first_name,
(select * from wp_usermeta where meta_key = 'last_name') as last_name,
(select * from wp_usermeta where meta_key = 'phone_number') as phone_number,
(select * from wp_usermeta where meta_key = 'wp_capabilities') as wp_capabilities
WHERE
ID = first_name.user_id AND
ID = last_name.user_id AND
ID = phone_number.user_id AND
ID = wp_capabilities.user_id AND
wp_wpi_capabilities.meta_value LIKE '%administrator%'
ORDER BY first_name
Это хорошо работает, однако, если у определенного пользователя отсутствует мета-ключ, например, 'last_name', эта строка пользователя вообще не возвращается. Так что на самом деле все, что мне нужно, это способ вернуть значение Null для отсутствующих мета-ключей.
Прямо сейчас у меня есть очень хакерская функция, которая проходит и создает пустые meta_keys и meta_values для всех пользователей, у которых нет заданного meta_key, таким образом они возвращаются. Это ужасный способ сделать это, когда у вас более тысячи пользователей, и вам нужно добавить новый тип meta_key.
Дайте мне знать, если кто-то сделал это, или мне нужно объяснить лучше.
Спасибо.