[WordPress] 複数のテーブルを結合するための構文

スポンサーリンク

Question

特定

WHERE

基準に基づく 3 の異なるテーブルからの行を照会する必要があります

表が:

  • 地域
  • プロファイル
  • ユーザーメタ

、プロファイル テーブルに 2 つの外部キー、user_id と region_id、次の表を参照する

ユーザー テーブルには id、名と姓の列。Id を持つプロファイル テーブルで各行の名と姓を取得する必要があります

地域テーブルに名前と id 列。プロファイル テーブルに対応する id を持つ各領域の名前を取得する必要があります

プロファイル テーブルからもある列 id、証明書は、およびタイトルである必要があります

今私は引っ張っていますこれらの非常に有効である 3 つの独立したクエリ。私は知っているとの結合、それを行うことができますが構文はどういうことかと確信するのではない

ここで何があるところ:

$q = $wpdb->prepare( "
   SELECT p.id, u.first_name, u.last_name, r.name, p.title
   FROM modules_profiles p
   LEFT JOIN moonlight_usermeta u ON u.user_id = p.user_id
   LEFT JOIN modules_regions r ON r.id = p.region_id
   WHERE p.certification IN ( '%s' ) AND p.country_id IN ( %d )", $certification, $country_id );
$results = $wpdb->get_results( $q );

ユーザーメタ テーブルなし素晴らしい作品します。ユーザーメタはテーブルがある first_name と last_name キーとして user_id と別々 の行として今

ここでは $q var_dump

string(275) "SELECT p.id, u.first_name, u.last_name, r.name, p.title FROM modules_profiles p LEFT JOIN moonlight_usermeta u ON u.user_id = p.user_id LEFT JOIN modules_regions r ON r.id = p.region_id WHERE p.certification IN ( 'certified' ) AND p.country_id IN ( 2 ) ORDER BY p.user_id ASC"

更新:

我々 はユーザーメタから引っ張っていないとはいえこの sql は正しい結果を返す:

string(193) "SELECT p.id, r.name, p.title FROM modules_profiles p  LEFT JOIN modules_regions r ON r.id = p.region_id WHERE p.certification IN ( 'certified' ) AND p.country_id IN ( 2 ) ORDER BY p.user_id ASC"

答え

結合の構文は、次のような:

SELECT stuff
FROM firstTable
JOIN secondTable ON firstTable.someColumn = secondTable.matchingColumn

この場合、私はまたをお勧めします (だけの追加エイリアス右テーブル名は十分後)、テーブルの別名を使用します。これは正しい方向にだけのシンプルなプッシュ:

SELECT columnsYouNeed
FROM users u
JOIN profiles p ON p.user_id = u.id
JOIN regions r ON r.id = p.region_id;

これはあなたが探している、列を正しく入力し、必要があります任意の WHERE 句を追加することを挑戦でしょう構文です。あなたはまだ立ち往生している場合お気軽に質問します

答え

あなたが結合を使用して述べたよう

以下のユーザーを必ずしもプロファイルまたは領域を持っているかもしれないこと仮説に基づくクエリです

常が、または場合だけこれらのプロファイルと地域し可能性があります変更する INNER JOIN

SELECT users.first_name, users.last_name, regions.name,  profiles.id, profiles.certs, profiles.title
FROM users
LEFT JOIN profiles ON profiles.user_id = users.id
LEFT JOIN regions ON regions.id = profiles.region_id

答え

のすべてのテーブルの間の

JOIN

を行います。クエリの下の記事であなたが提供する情報の組み立ては

select users.first_name,
users.last_name,
regions.name,
profiles.id, 
profiles.certs, 
profiles.title
from users 
left join profiles on profiles.user_id = users.id
left join region on profiles.region_id = regions.id;

http://stackoverflow.com/questions/27005045/syntax-for-joining-multiple-tables

スポンサーリンク

Leave a Reply