質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

1回答

2607閲覧

Wordpress SQL直書きでカスタムタクソノミーで検索する方法

resix

総合スコア8

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

0クリップ

投稿2019/03/12 12:51

現在、wordpressでsql文を直接記述して、データ取得をしようとしています。
単純な記事情報を取得することはできました。

しかし、カスタムタクソノミーで絞り込んで取得することができません。
sqlが不慣れなため、どのたかアドバイスお願いいたします。

**記述コード(WHEREのみ)** WHERE $wpdb->posts.term_taxonomy.slug = 'tokyo' AND $wpdb->posts.term_taxonomy.taxonomy = 'area'

意図としては、(area)というカスタムタクソノミーが(tokyo)のものを絞り込みたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2019/03/12 14:12 編集

このコードはどこに記載したのでしょうか? データを取得する一連のコードを記載していただけないでしょうか? また、できませんだけでは、何が問題になっているのか、何が起きているのかわかりません。 どのようなメッセージが表示されているとか、具体的な状況を記載してください。
KazuhiroHatano

2019/03/12 15:11

WPのカテゴリ検索はWHEREよりJOINの方が肝だと思う カテゴリに関わるDBのテーブルは3つあって これらの関係性を把握してどうやってJOINすればいいか 知るところがWPでカテゴリ検索のSQLを書く第一歩 https://codex.wordpress.org/Database_Description まずはJOINの部分を
resix

2019/03/13 03:53

ご返答ありがとうございます。 確かに、私の説明不足でした。申し訳ありません。 先に、記述の場所ですが以下で試しました。 SELECT $wpdb->posts.ID,$wpdb->posts.post_title FROM $wpdb->posts WHERE $wpdb->posts.term_taxonomy.slug = 'tokyo' AND $wpdb->posts.term_taxonomy.taxonomy = 'area' AND $wpdb->posts.post_status = 'publish' ORDER BY $wpdb->posts.post_date DESC メッセージは特になく、なにも取得できない。という状況です。 私がDB構造や、JOINしなければいけない意味が理解できていないのだと思います。 ネットで調べてみたのですが、この方がやっていることが近いのかとおもうのですが、 https://accelboon.com/tn/488/ JOINする意味(結合する意味)と、なにをやっているかに関して説明があるサイトが見つけられませんでした。 わかりずらく申し訳ございません。 やりたいことは、(postデータ)を(カスタムタクソノミーのスラッグ名)で絞って(SQL)でとりたいです。 DB構造の簡単な説明と、これをやるためには、こういう意味でJOINしないといけないという部分を 教えていただきたいです。
guest

回答1

0

うろ覚えでテキトーに流して書いてるので絶対どっか間違ってると思うけど
WPのカテゴリ検索のSQLはだいたいこんな感じになるはず

MySQL

1SELECT * FROM {$wpdb->posts} AS p 2JOIN {$wpdb->term_relation} AS tr ON tr.object_id = p.ID 3JOIN {$wpdb->term_taxonomy} AS tt ON tt.term_id = tr.term_id 4JOIN {$wpdb->terms} AS t ON t.term_id = tt.term_id 5WHERE tt.taxonomy = `area` AND t.slug = `tokyo`

まあでも、WPの関数でできることをわざわざ自前でSQLを書くのはオススメしないです

WPの関数は単純にDBからデータ取り出すだけでなく
フィルタ通したり無害化したりシリアライズしたり
パスワードをハッシュ化したりまあまあいろんなことをやってて
サイトに自前のSQLの処理が混じってくると
色々齟齬が出てくる可能性があります

やろうとしてることがWPの関数のしてる処理がむしろ邪魔とか
DBの値を直接触ることに意味があるとかでもない限りは
普通にWPの関数使っといた方がいいです

投稿2019/03/13 03:11

KazuhiroHatano

総合スコア7804

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

resix

2019/03/13 03:56

ご回答ありがとうございます。 その後、いろいろ調べたのですが、JOINが重要なのですね。 それをしなければいけない意味がまだ理解できていません。 もう少し、調べてみます。 ありがとうございます。
KazuhiroHatano

2019/03/13 04:15

JOINはOUTER・INNER・RIGHT・LEFTの使い分けとか処理の順番とか ちゃんと考えて使わないとねずみ算式に処理が重くなるとかあるので 流さずにそれなりに腰を据えて学習した方がいいかも? 回答のも多分INNER JOINの方がいいんだよね その上でtt.taxonomy = `area`もJOINのONに回した方が 多分無駄な処理を削げる JOINは結構考えること多いです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問