web-dev-qa-db-ja.com

左の接合、内の外側の接合、左の外側の接合は私を夢中にさせています。助けてください?

仲間のコーダー!私はテーブルを結合するのに苦労しています。

私のサイトにはたくさんのユーザーがいて、その多くは同じ姓を持っています。私は彼らのラストネームで彼らのEメールを受け取ろうとしています。 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
Holidaymaine

こんにちは@ Holidaymaine

どこが間違っているのかわかりませんが、代わりに自己完結型のtest.phpファイルである以下を試してください。Webサイトのルートにドロップし、ブラウザにhttp://yoursite.com/test.phpyoursite.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);
3
MikeSchinkel

あなたはAPIを介してこれを行うことができ、ユーザー検索は3.1で改善されました

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

var_dump($search->get_results());
2
Rarst

SELECT users.user_email, usermeta.meta_value

する必要があります:

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

接頭辞が重要です。

1
Otto