Левое соединение, внутреннее внешнее соединение, левое внешнее соединение сводит меня с ума. Пожалуйста помоги?
Вопрос
коллеги -кодеры! Я испытываю трудности в таблицах (ing).
У меня есть много пользователей на моем сайте, и многие из них имеют одинаковые фамилии. Я пытаюсь получить их электронные письма по фамилии. WP хранит электронные письма в таблице пользователей и имена пользователей в UserMeta, и я пытался использовать присоединение, чтобы получить то, что я хочу, но я не понимаю, как это работает, и я собираюсь сдаться на этот день. Это то, что у меня есть после 4,5 часов.
$usersemails = $wpdb->get_results("SELECT users.user_email, usermeta.meta_value
FROM $wpdb->users
LEFT JOIN $wpdb->usermeta ON $wpdb->users.ID = $wpdb->usermeta.user_id
WHERE user_status = '0'
AND meta_value = 'Smith'");
Любая помощь ценится, так что, пожалуйста, помогите? Спасибо.
Решение
Привет @Holidaymaine:
Не уверен, где вы делаете неправильно, но вместо этого попробуйте следующее test.php
Файл, который вы можете бросить в корень вашего сайта и загрузить в браузер http://yoursite.com/test.php
(при условии, что вы замените yoursite.com
С доменом вашего сайта! Также обратите внимание, как я добавляю в WHERE {$wpdb->usermeta}.meta_key = 'last_name'
Чтобы убедиться, что вы не получили записи, которых не ожидали):
<?php
/*
Filename: test.php
*/
include('wp-load.php');
$sql =<<<SQL
SELECT
{$wpdb->users}.user_email,
{$wpdb->usermeta}.meta_value
FROM
{$wpdb->users}
LEFT JOIN {$wpdb->usermeta} ON {$wpdb->users}.ID = {$wpdb->usermeta}.user_id
WHERE 1=1
AND {$wpdb->users}.user_status = '0'
AND {$wpdb->usermeta}.meta_key = 'last_name'
AND {$wpdb->usermeta}.meta_value = 'Smith'
SQL;
$usersemails = $wpdb->get_results($sql);
header('Content-type:text/plain');
print_r($usersemails);
Другие советы
Вы можете сделать это через API, поиск пользователя был улучшен в 3.1
$search = new WP_User_Query(array(
'meta_value' => 'Lastname',
'fields' => array('user_email'),
));
var_dump($search->get_results());
SELECT users.user_email, usermeta.meta_value
Должно быть:
SELECT $wpdb->users.user_email, $wpdb->usermeta.meta_value
Префиксы имеют значение.