今回は、前回の続きで、サイトごとに分かれているテーブルを結合して1つのデータにまとめたいと思います。

wordpressのマルチサイトで各サイト(ブログ)の記事を混ぜて一覧表示する

  1. wordpressのマルチサイトで各サイトの記事を混ぜて表示する方法を考える
  2. MySQL – サイト毎に分かれている投稿テーブルを1つにまとめる
  3. MySQL – ブログIDを追加する
  4. MySQL – 1つにまとめたデータを投稿日順に並び替える
  5. MySQL – 1つにまとめたデータに取得件数を指定する
  6. 完成版(ページングなし) – wordpressのマルチサイトで各サイトの記事を混ぜて一覧表示する

スポンサーリンク

はじめに

前回までのつづき

今回やりたいこと

  • サイトごとに分かれている投稿テーブルを結合して1つのデータにまとめる

シリーズを通してやりたいこと / ゴール

制作環境 / テスト環境

  • wordpress サブディレクトリ型のマルチサイト

情報

今回は、下記の条件・情報でおこないたいと思います。

テーブルを1つにまとめる前に・・・

テーブルを一つにまとめる前に、まず、各サイトごとのSELECT文を作成してみます。

上記の図の左側、各サイトごとにバラバラな部分のSELECT文です。

ここは、シンプルなので説明は省きますが、以下の通りです。

// 親サイト ブログID:1
SELECT
	ID,
	post_date
FROM wp_posts
WHERE post_status = 'publish'
AND post_type = 'news'

// 子サイト ブログID:2
SELECT
	ID,
	post_date
FROM wp_2_posts
WHERE post_status = 'publish'
AND post_type = 'post'

// 子サイト ブログID:3
SELECT
	ID,
	post_date
FROM wp_3_posts
WHERE post_status = 'publish'
AND post_type = 'info'

ブログIDは、後で追加するので、一旦こちらで進めます。
ブログIDは、こちらの記事で追加しています。

サイトごとに分かれている投稿テーブルをくっつける

では、今回の記事の本題、サイトごとに分かれている投稿テーブルを1つのデータにします。

前の「データを1つにまとめる前に・・・」にで作成した、サイトごとのバラバラのSELECT文をくっつければ、よさそうですね、、

複数のSELECT文をまとめるには、MySQLの「UNION ALL」

今回は、複数のSELECT文をまとめたいので、「UNION ALL」を使うことにしました。

SELECT文を「UNION ALL」で結合すればいいのはわかったのですが、書き方が違ったり文字コードが違う?とかでエラーが出まくり、だいぶハマってしまいました。。

こちらの記事を参考にさせていただき、無事に解決することができました!!
MySQL、2テーブルより値を結合しソートするテクニック

文字コードのエラーが出た場合の解決方法はこちら

MySQL 「UNION ALL」

「UNION ALL」でつないだSELECT文を「FROM ( ) u」で囲います。

またバラバラだった時のSELECTの取得するフィールド名
SELECT
 ID,
 post_date
の部分は、
テーブル名 + .(ドット) + フィールド名
に変更します。

SELECT *
	FROM
	(
		SELECT
			wp_posts.ID,
			wp_posts.post_date
		FROM wp_posts
		WHERE post_status = 'publish'
		AND post_type = 'news'

		UNION ALL

		SELECT
			wp_2_posts.ID,
			wp_2_posts.post_date
		FROM wp_2_posts
		WHERE post_status = 'publish'
		AND post_type = 'post'

		UNION ALL

		SELECT
			wp_3_posts.ID,
			wp_3_posts.post_date
		FROM wp_3_posts
		WHERE post_status = 'publish'
		AND post_type = 'info'
	) u

 

wordpressのDBを確認するには管理画面から確認できる「ARI Adminer」が便利です!

まとめ

これで、サイト毎の各テーブルを1つのデータにまとめることができました!

日付順に並び替える前に、もう一つ追加しておきたいデータがありました。
ブログIDです。

次回は、今回のデータにブログIDを追加するところからやりたいと思います。

wordpressのマルチサイトで各サイト(ブログ)の記事を混ぜて一覧表示する

  1. wordpressのマルチサイトで各サイトの記事を混ぜて表示する方法を考える
  2. MySQL – サイト毎に分かれている投稿テーブルを1つにまとめる
  3. MySQL – ブログIDを追加する
  4. MySQL – 1つにまとめたデータを投稿日順に並び替える
  5. MySQL – 1つにまとめたデータに取得件数を指定する
  6. 完成版(ページングなし) - wordpressのマルチサイトで各サイトの記事を混ぜて一覧表示する

参考にさせていただきました


スポンサーリンク