wp_term_relationshipsテーブルとwp_postsテーブルを結合する時に不便なのがwp_term_relationshipsにterm_idが無いことです。
term_taxonomy_idはあるのですが。。。
気をつけたいのがterm_taxonomy_idとterm_idは必ずしも同じではないのです。
term_taxonomy_idとterm_idを紐づけるにはwp_term_taxonomyテーブルも必要になりますがこのためだけに3つのテーブルを結合するのは面倒ですよね?
そんな時の便利なSQLを紹介します。
SELECT wp_posts.* FROM wp_term_relationships INNER JOIN wp_posts ON wp_term_relationships.object_id = wp_posts.id WHERE wp_term_relationships.term_taxonomy_id= ( SELECT term_taxonomy_id FROM wp_term_taxonomy WHERE term_id = /*タームIDを指定する*/ ) AND wp_posts.post_status = "publish"
term_idでデータベースに問い合わせする際はpost_type=”post”の指定はいりません。
固定ページにはカテゴリーもタグもないからです。
wp_postsテーブルとwp_term_relationshipsテーブルを内部結合、post_idとobject_id を結合条件にしています。
注目して欲しいのがWHERE句です。
wp_term_taxonomyテーブルからterm_idで問合わせて、term_taxonomy_idを取得しています。
この取得したterm_taxonomy_idをそのまま条件に指定します。これをサブクエリといいます。