左连接,内连接外连接,左连接外连接快把我逼疯了。请帮帮忙好吗?

时间:2011-04-22 作者:Holidaymaine

各位程序员!我很难加入桌子。

我的网站上有很多用户,其中许多人的姓氏相同。我想通过他们的姓氏来获取他们的电子邮件。WP在users表中存储电子邮件,在usermeta中存储用户名,我一直在尝试使用JOIN来获取我想要的内容,但我不明白它是如何工作的,我今天就要放弃了。这是我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\'");
非常感谢您的帮助,您能帮忙吗?谢谢

3 个回复
最合适的回答,由SO网友:MikeSchinkel 整理而成

你好@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);

SO网友:Rarst

您可以通过API实现这一点,用户搜索在3.1中得到了改进

$search = new WP_User_Query(array(
             \'meta_value\' => \'Lastname\',
             \'fields\' => array(\'user_email\'),
                ));

var_dump($search->get_results());

SO网友:Otto

SELECT users.user_email, usermeta.meta_value

应为:

SELECT $wpdb->users.user_email, $wpdb->usermeta.meta_value

前缀很重要。

结束