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

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

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

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

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

WordPress

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

2151閲覧

重複クエリーを消したい

cafe1111

総合スコア62

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

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

WordPress

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

1クリップ

投稿2020/06/26 01:43

編集2020/06/26 06:28

■やりたいこと
wordpressで重複クエリーを消したい
■問題点
the_content();で取得したものが何故か二回表示されてしまうため、Query Monitorで調べてみたところ重複しているクエリーがあるみたいでそれが原因と考えられます。
この重複クエリーを消す方法がわかりません。

sql

1//重複クエリー 2 3SELECT SQL_CALC_FOUND_ROWS wp_posts.ID 4FROM wp_posts 5INNER JOIN wp_postmeta 6ON ( wp_posts.ID = wp_postmeta.post_id ) 7WHERE 1=1 8AND ( wp_postmeta.meta_key = '_bbp_last_active_time' ) 9AND wp_posts.post_type = 'topic' 10AND (wp_posts.post_status = 'publish' 11OR wp_posts.post_status = 'closed' 12OR wp_posts.post_status = 'private' 13OR wp_posts.post_status = 'hidden') 14GROUP BY wp_posts.ID 15ORDER BY wp_postmeta.meta_value DESC 16LIMIT 0, 35 17 18//数 2 19 20//呼び出し元 WP_Query->get_posts()2件のコール 21 22//コンポーネント プラグイン: bbpress2件のコール 23 24//潜在的脅威 WP_Query->get_posts()2件のコール 25 26//重複しているクエリー1の呼び出し元 WP_Query->get_posts() 27 28//重複しているクエリー2の呼び出し元 29WP_Query->get_posts() 30wp-includes/class-wp-query.php:3005 31WP_Query->query() 32wp-includes/class-wp-query.php:3432 33WP_Query->__construct() 34wp-includes/class-wp-query.php:3541 35bbp_has_topics() 36wp-content/plugins/bbpress/includes/topics/template.php:203 37load_template('wp-content/plugins/bbpress/templates/default/bbpress/content-archive-topic.php') 38wp-includes/template.php:725 39bbp_locate_template() 40wp-content/plugins/bbpress/includes/core/template-functions.php:105 41bbp_get_template_part() 42wp-content/plugins/bbpress/includes/core/template-functions.php:43 43BBP_Shortcodes->display_topic_index() 44wp-content/plugins/bbpress/includes/common/shortcodes.php:300 45do_shortcode_tag() 46wp-includes/shortcodes.php:343 47preg_replace_callback() 48wp-includes/shortcodes.php:343 49do_shortcode() 50wp-includes/shortcodes.php:218 51apply_filters('the_content') 52wp-includes/plugin.php:206 53the_content() 54wp-includes/post-template.php:253

■環境
phpmyadmin
■追加情報
イメージ説明
クエリー

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

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

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

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

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

yambejp

2020/06/26 02:01

SQL ServerとphpMyAdminだと環境が全然違いますがMySQLということでよろしいですか?
sazi

2020/06/26 02:02

wp_posts.ID と wp_postmeta.post_idの関係は1:多ですよね?
sazi

2020/06/26 02:10

MySQLのバージョンは何ですか?
sazi

2020/06/26 02:13

重複クエリーと言われているのは、「クエリーの結果に同じ値が返却される」という意味ですか?
cafe1111

2020/06/26 02:40

SQL ServerとphpMyAdminだと環境が全然違いますがMySQLということでよろしいですか? >>mysqlです。 wp_posts.ID と wp_postmeta.post_idの関係は1:多ですよね? >>すみません、こちらはよくわかりません。 どこから確認すればわかるのでしょうか。 MySQLのバージョンは何ですか? >>5.7.26 - MySQLです。 重複クエリーと言われているのは、「クエリーの結果に同じ値が返却される」という意味ですか? >>質問の答えになっているかわかりませんが <div class="entry-content clearfix">  <?php the_content(); ?> </div> この表記が <div class="entry-content clearfix">  <div id="bbpress-forums"></div> <div id="bbpress-forums"></div> <div id="bbpress-forums"></div> </div> となってしまいます。 正確には3つ表記されるのですが1番上はサイトには表示されていないので問題ないと思います。
sazi

2020/06/26 02:46

>>wp_posts.ID と wp_postmeta.post_idの関係は1:多ですよね? >すみません、こちらはよくわかりません。 >どこから確認すればわかるのでしょうか。 テーブルの設計段階で決まっているはずです。それが分からなければ正しいSQLは組めません。
cafe1111

2020/06/26 03:28

すみません、このテーブルを作成したのは自分じゃないのでわからないです。 一応作った方に聞いてみます。
CHERRY

2020/06/26 06:14

SQL からすると、WordPress の bbPress プラグインの話ですね。 この現象が出るのは、bbPress のどの画面を表示する際でしょうか? また、お使いのテーマは何をお使いですか?
cafe1111

2020/06/26 06:22

WordPress の bbPress プラグインの話です。 この現象が出るのは、bbPress のどの画面を表示する際でしょうか? >>excellent child/page.phpです また、お使いのテーマは何をお使いですか? Excellent Childです。
cafe1111

2020/06/26 06:34

すみません、正確には>excellent child/page.phpのトピックが重複します。
CHERRY

2020/06/26 11:09 編集

状況が把握できていなくて、再現ができないので、こちらで... お使いのテーマは、 https://wordpress.org/themes/excellent/ の子テーマということでしょうか? このテーマだとするとテーマは、bbPress をサポートしていると書いているので、そんなに変な動きをするとは思えないのですが... 子テーマは、いろいろカスタマイズされていると思いますので、子テーマではなく カスタマイズしていない状態の親テーマをテーマに指定してみると どのような状況になりますか?  同じように重複しますか?
cafe1111

2020/06/27 09:03

ご返信が遅れてしまい申し訳ありません。 テーマはurlのものです。 親テーマだけではなく他のテーマに切り替えてみても重複してました。 しかしbbpressを更新したら自分がカスタマイズした部分は消えましたが重複しなくなりました。 なので更新しても消えないようにしてから、bbpressをアップデートすれば解決するのかなと考えております。
guest

回答2

0

ベストアンサー

order byの指定によって、暗黙的にwp_postmeta.meta_valueもgroup byになっていないでしょうか。
order byを外してみてください。

外す事によって重複が無くなった場合で、order byも指定が必要なら、wp_postmeta.meta_valueのMax()やMin()などの集計関数を指定したものに対してのorder byとなるように変更して下さい。

尤も、meta_valueの扱いについてルール(仕様)があるなら、そんなに単純ではないでしょうけど。

投稿2020/06/26 02:49

編集2020/06/26 03:34
sazi

総合スコア25195

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

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

cafe1111

2020/06/26 03:27

すみません、どこから外せば良いのでしょうか?
sazi

2020/06/26 03:32

質問にあるSQLの話です。
cafe1111

2020/06/26 05:53

phpmyadminのSQLに下記のように変えてから実行しました効果なしでした。 SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) WHERE 1=1 AND ( wp_postmeta.meta_key = '_bbp_last_active_time' ) AND wp_posts.post_type = 'topic' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'closed' OR wp_posts.post_status = 'private' OR wp_posts.post_status = 'hidden') GROUP BY wp_posts.ID LIMIT 0, 35
sazi

2020/06/26 05:59 編集

上記SQLを直接実行して重複があるのですか? SQL_CALC_FOUND_ROWS を指定しないとどうなりますか?
cafe1111

2020/06/26 06:15

直接実行しても重複がまだあります。 SQL_CALC_FOUND_ROWSをなしにしても特に変化がありませんでした。 一応写真も追加しておきます。
sazi

2020/06/26 06:21

画像には重複しているIDがありませんが。
cafe1111

2020/06/26 06:27

そうなんですか、、 しかし実際にサイトを見に行くと何も変化がありません。 こちらも写真を載せておきます。
sazi

2020/06/26 06:35

クエリーの結果が重複してるということではなく、同じクエリーが複数回実行されているって事みたいですね。
sazi

2020/06/26 06:37

そっち方面には明るくないので、お役に立てそうにありません。 ただ、order byについては事実ですので、見直しされて下さい。
cafe1111

2020/06/26 06:42

わかりました。 ここまで考えてくださりありがとうございました。 order byについては見直してみます。 ありがとうございました。
guest

0

重複をなくすという意図がわかりませんが
post_status がORで検索してるのですから、条件が複数マッチする可能性はあります

投稿2020/06/26 02:36

yambejp

総合スコア114837

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

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

cafe1111

2020/06/26 02:47

そうなんですか、、 重複をなくす意図は同じ内容が表示されてしまうからです。 例: <div class="entry-content clearfix"> <?php the_content(); ?> </div> これが <div class="entry-content clearfix"> <p>aaaaaaa</p> <p>aaaaaaa</p> </div> のようになります。 本来は一回表示でいいのに同じものが二回表示されてしまいます。
yambejp

2020/06/26 03:31

テーブルの構造、データ、リレーションの仕方しだいなので いま提示されているデータでは回答にもつけたとおり「or検索で複数ヒットしてる?」 くらいしか言いようがないですね。 データが複数あれば同じデータが表示されるのは当たり前です
sazi

2020/06/26 03:34

group byしてるのに重複しているって事だと思います。
cafe1111

2020/06/26 06:42

少し見直してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問