ただの個人的なメモです。
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;
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を勉強して記述するしかない。