WordPressのデータベースでテーブル2つを結合して以下の情報を取得しようとしています
メール(wp_users.user_email)|名前(wp_usermeta.meta_value)|登録日時(wp_users.user_registered )
123@a.com,山田,2012-06-17 12:33:44
456@b.jp,田中,2012-06-21 07:26:54
789@c.ne.jp,\N,2009-08-11 12:19:00
1234@d.ne.jp,\N,2009-08-11 12:19:00
321@x.ne.jp,\N,2009-08-11 12:19:00
・ユーザーはwp_usersテーブルにeメール情報(user_email)を必ず持ている
・ユーザーの名前はwp_usermetaテーブルのwp_usermeta.meta_keyがuser_nameなレコードに保存されているが、ユーザーによってあるものとないものがある。無い場合はNULLにする。
テーブル構造は添付した画像に記載されています。
■ユーザ数
mysql> SELECT COUNT(*) FROM wp_users;
18290
まずwp_usersとwp_usermetaをLEFT JOINしてmeta_key = 'user_name'なレコードを取得しようとしましたが、user_nameを持っているユーザーのみしか取得できませんでした。
■user_nameを持っていないユーザーが取得できない
SELECT u.user_email, m.meta_value FROM wp_users AS u LEFT JOIN wp_usermeta AS m ON u.ID = m.user_id WHERE m.meta_key = 'user_name'\G
2075 rows in set (0.00 sec)
次にサブクエリをJOINしました。結果は正しいものを取得できたのですが、実行時間が40秒以上かかってしまい実用性がありません。
■欲しい結果(速度が遅い)
SELECT u.user_email, a.meta_key, a.meta_value, u.user_registered FROM wp_users AS u LEFT JOIN (select * from wp_usermeta where meta_key = 'user_name') as a ON u.ID = a.user_id;
18290 rows in set (45.45 sec)
この結果を取得できる、正しいSQLを教えてください。よろしくお願いします。
No.1ベストアンサー
- 回答日時:
いまいち構造がわからないのですが
whereじゃなくて連結の条件にしてみては?
SELECT u.user_email, m.meta_value
FROM wp_users AS u
LEFT JOIN wp_usermeta AS m
ON u.ID = m.user_id
and m.meta_key = 'user_name'
ありがとうございました。
速度も圧倒的にこちらが速かったです。
18290 rows in set (2.22 sec)
ONにANDをつけられることを初めて知りました・・
ネットで検索・質問の前にリファレンスを読んでおきます
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript Json のキーと値の出力の違いについて 2 2022/06/14 20:22
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP php ログイン 1 2022/11/01 00:24
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Excel(エクセル) 【マクロ】フォルダAからダBへファイルを、ファイルの更新日時の条件で、1つづつ移動するには? 3 2022/08/25 09:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【MYSQL】asでリネームしてwher...
-
月別、販売員別の集計がわかり...
-
SQL文で右から1文字だけ削除す...
-
カウント結果を1レコードの中...
-
【初歩】ラジオボタンをつかっ...
-
SQLの集計で「全て」の合計も表...
-
使うべきでない文字。
-
JOINでの結果取得 サブクエリ...
-
GROUP BYを行った後に結合した...
-
Accessで別テーブルの値をフォ...
-
MERGE文を単体テーブルに対して...
-
SELECTで1件のみ取得するには?
-
Date型にNULLをセットしたい V...
-
ファイル書込みで一行もしくは...
-
カレントレコードが無い事を判...
-
あるカラムのMAX値+1をINSERTし...
-
Accessのクエリでフィールドの...
-
SET句内で複数の条件を指定して...
-
レコードセット(ADO.Recordset)...
-
レコード長を数えてくれる関数
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQL文で右から1文字だけ削除す...
-
使うべきでない文字。
-
【MYSQL】asでリネームしてwher...
-
sum()の出力結果順に並び替えを...
-
初心者Mysqlの関数のsubstring...
-
SQLの集計で「全て」の合計も表...
-
割合(パーセント)を求めるに...
-
MySQL のデータからドロップダ...
-
チェックボックスの項目をDBにi...
-
【初歩】ラジオボタンをつかっ...
-
MySQLで MAX()とGROUP BYを使う...
-
カウント結果を1レコードの中...
-
phpmyadminはトリガーやIF文を...
-
月別、販売員別の集計がわかり...
-
replaceした上でwhere
-
今週の日曜日から土曜日までの...
-
サブクエリ内で INNER JOIN は
-
複数の表の条件でのDELETE文
-
姓名の前後を入れ替えるSQL命令...
-
mySQLでグループ別の順位を入力
おすすめ情報