编码人员!我很难加入(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归因
scroll top