Webは用いる人のリテラシーで決まる ウェブ運用と開発現場を経験したエンジニアのTIPS
TOP > BLOG > IT記事

WordPressの記事情報を呼び出すSQLの記述例

早川朋孝 早川朋孝
EC専門のSE

ただの個人的なメモです。

WordPressの特定タグの記事情報を呼び出すSQL

以下のSQLは特定のタグの記事情報を得る記述だ。ここではタグidが28で、公開しているブログ記事で、記事タイトル、記事ID、タグID、タグ説明文、記事本文をよびだしている。シンプルなリクエストであるのにけっこう面倒なSQLだが、WordPressのSQLは記事情報とタグ情報と、記事とタグを結びつける情報の3つのtabbleに分かれている。

要するに、自分でデータ構造を把握しないとSQL分は書けないのです。エンジニアが初めて触れるシステムを理解するには、まずデータ構造の把握から始まると言っても過言ではないでだろう。

SELECT DISTINCT WP.post_title, WP.id, WTR.term_taxonomy_id, WTT.description, WP.post_content FROM wp_posts as WP INNER JOIN wp_term_relationships AS WTR ON WP.id = WTR.objet_id INNER JOIN wp_term_taxonomy AS WTT ON WTR.term_taxonomy_id = WTT.term_taxonomy_id INNER JOIN wp_terms AS WT ON WTT.term_id = WT.term_id WHERE post_type=’post’ && post_status=’publish’ && WTR.term_taxonomy_id=’28’

特定のタグの記事情報をCSVエクスポートする

上記のSQLの内容をCSVエクスポートする場合のコマンド例。これはSQLではなくサーバーのコマンドとして打つ。

#mysql -uadmin -p DBNAME -e “SELECT DISTINCT WP.post_title, WP.id, WTR.term_taxonomy_id, WTT.description, WP.post_content FROM wp_posts as WP INNER JOIN wp_term_relationships AS WTR ON WP.id = WTR.object_id INNER JOIN wp_term_taxonomy AS WTT ON WTR.term_taxonomy_id = WTT.term_taxonomy_id INNER JOIN wp_terms AS WT ON WTT.term_id = WT.term_id WHERE post_type=’post’ && post_status=’publish’ && WTR.term_taxonomy_id=’18’;” | sed -e ‘s/^/”/g’ | sed -e ‘s/$/”/g’ | sed -e ‘s/\t/”,”/g’ > ./wp_posts_18.csv

レコメンドの一覧を見る

レコメンドというのは自分で追加したtableのこと。ある記事に4つのおすすめ記事をレコメンドするという仕様のデータ構造となっている。同じ記事本文のIDをasをつけて区別しているのがポイント。そうでないと希望の動作にならないから。

select WP.id, WP.post_title, WP2.post_title from wp_posts as WP
inner join wp_recommend as WR on WP.id = WR.post_id
inner join wp_posts as WP2 on WP2.id = WR.recommend_id;

これもやはりデータ構造を把握していないと書けない。もう十分理解できたと思うが、例えWordPressのようなよく知られたCMSであっても、大抵の場合は自分の知りたいSQLがネットに転がってるなんてことはまずない。データ構造を把握して、自分でSQLを勉強して記述するしかない。

×
このブログを書いてる人
早川 朋孝 EC専門のSE
IT業界歴20年のエンジニアです。ネットショップ勤務で苦労した経験から、EC・ネットショップ事業者に向けて、バックオフィス業務の自動化・効率化を提案するSEをしています。
プロフィール
API連携の相談にのります
趣味は読書、ピアノ、マリノスの応援など
PAGE TOP