Левое соединение, внутреннее внешнее соединение, левое внешнее соединение сводит меня с ума. Пожалуйста помоги?

wordpress.stackexchange https://wordpress.stackexchange.com/questions/15385

  •  16-10-2019
  •  | 
  •  

Вопрос

коллеги -кодеры! Я испытываю трудности в таблицах (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

Префиксы имеют значение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с wordpress.stackexchange
scroll top