ユーザー情報の表示(wp_users)
ユーザー名などのユーザー情報が保存されているテーブルはwp_users
になります。
このテーブルとポストwp_posts
を結合してみましょう。
記事一覧にユーザー情報を表示
テーブルの結合はJOIN
句にテーブル名。ON
句に結合条件を記述します。
条件はwp_posts
のpost_author
がユーザーIDになるので、これとwp_users
のID
と結びつけます。
SELECT * FROM wp_posts JOIN wp_users ON wp_posts.post_author = wp_users.ID
指定ユーザーの記事を検索
テーブルを結合した後は普通にWHERE
で条件を指定できます。
user_login
がadminを検索したい場合は下記のようにします。
SELECT * FROM wp_posts JOIN wp_users ON wp_posts.post_author = wp_users.ID WHERE user_login = "admin"
SELECTの詳細選択と別名
ソースコード省略のためSELECT
には*
ですべてのカラムを選択してますが、通常はカラムを指定することになると思います。
しかし、複数のテーブルを選択すると単純にID
と指定しても、どのテーブルのIDかわからないですね。
その為、複数のテーブルを扱うときはSELECT
には「テーブル名.カラム名」のような記述にします。
SELECT wp_posts.ID, wp_posts.post_title, wp_posts.post_date, wp_users.display_name
テーブル名(wp_posts)を何度も書かなくてはいけないので長いとめんどいですよね。FROM
後にAS
で別名を付けて短縮してみましょう。
SELECT p.ID, p.post_title, p.post_date, u.display_name FROM wp_posts AS p JOIN wp_users AS u ON u.ID = p.post_author
だいぶすっきりしましたね。
カテゴリー・タグで検索(wp_terms)
WordPressはカテゴリーやタグはまとめてタームと呼ばれたりもします。
タームは一つの記事に複数のタームが関連付けされる可能があります。
リレーショナルデータベースではこの場合、テーブルとテーブルの間に関連付けするだけの中間テーブルを作ることが多いです。
WordPressの場合ターム情報はwp_posts
とwp_term_taxonomy
の中間テーブルとしてwp_term_relationships
テーブルがあり、さらにwp_terms
に名称などの記載があります。
その他にカスタムフィールド用のテーブルwp_termmeta
があり、ターム関係のテーブルだけで4つのテーブルがあります。
ターム名で検索したい場合はwp_termmeta
以外の4つを結合します。
ターム名のWordPress
に属している投稿を検索する場合は次のようになります。
SELECT p.ID, p.post_title, p.post_date FROM wp_posts AS p JOIN wp_term_relationships AS tr ON tr.object_id = p.ID JOIN wp_term_taxonomy AS tt ON tt.term_taxonomy_id = tr.term_taxonomy_id JOIN wp_terms AS t ON t.term_id = tt.term_id WHERE p.post_type = "post" AND p.post_status = "publish" AND t.name = "WordPress"
カスタムフィールドで検索(wp_postmeta)
カスタムフィールドはwp_postmeta
テーブルに保存されています。
このテーブルはpost_id
が投稿のIDになっているのでwp_posts
のID
と結合します。
例えばprice
というカスタムフィールドの値が1000以上の投稿を検索したい場合は次のようになります。
SELECT DISTINCT p.ID, p.post_title, p.post_date, meta.meta_value FROM wp_posts AS p LEFT JOIN wp_postmeta AS meta ON meta.post_id = p.ID WHERE meta.meta_key = "price" AND meta.meta_value > 1000
WordPressで学ぶデータベース(MySQL)の基礎