エンティティー属性値の世界へようこそ。
結果セットを正常に表現するには、JOIN
これら 2 つのテーブルだけでなくPIVOT
、結果セットも必要になる場合があります。次のようなクエリでそれを行うことができます
SELECT p.id, p.status,
MAX(CASE WHEN m.meta_key = 'CustomerLN'
THEN m.meta_value END) customer_last_name,
MAX(CASE WHEN m.meta_key = 'CustomerFN'
THEN m.meta_value END) customer_firt_name,
MAX(CASE WHEN m.meta_key = 'Payment_Type'
THEN m.meta_value END) payment_type,
MAX(CASE WHEN m.meta_key = 'Invoice_Total'
THEN m.meta_value END) invoice_total
FROM wp_posts p LEFT JOIN wp_postmeta m
ON p.id = m.post_id
GROUP BY p.id, p.status
出力例:
+--------+--------+--------------------+------------ ------+---------------+---------------+
| | ID | ステータス | customer_last_name | customer_first_name | お支払い方法 | 請求書合計 |
+--------+--------+--------------------+------------ ------+---------------+---------------+
| | 1 | 開く | テスト | テスト テスター | ペイパル | $200 |
| | 2 | 開く | ドウ | ドウ | ジョン | CCマスターカード | $1000 |
| | 3 | 閉店 | ヌル | ヌル | ヌル | ヌル |
+--------+--------+--------------------+------------ ------+---------------+---------------+
これがSQLFiddleのデモです
HAVING
メタ キーとメタ値に基づいてレコードをフィルタリングできるようにするには、句を使用する必要があります。
たとえば、顧客の Jhon Doe が作成した請求書を取得する場合
SELECT p.id, p.status,
MAX(CASE WHEN m.meta_key = 'CustomerLN'
THEN m.meta_value END) customer_last_name,
MAX(CASE WHEN m.meta_key = 'CustomerFN'
THEN m.meta_value END) customer_first_name,
MAX(CASE WHEN m.meta_key = 'Payment_Type'
THEN m.meta_value END) payment_type,
MAX(CASE WHEN m.meta_key = 'Invoice_Total'
THEN m.meta_value END) invoice_total
FROM wp_posts p LEFT JOIN wp_postmeta m
ON p.id = m.post_id
GROUP BY p.id, p.status
HAVING customer_last_name = 'Doe'
AND customer_first_name = 'John'
出力:
+--------+--------+--------------------+------------ ------+---------------+---------------+
| | ID | ステータス | customer_last_name | 顧客名 | お支払い方法 | 請求書合計 |
+--------+--------+--------------------+------------ ------+---------------+---------------+
| | 2 | 開く | ドウ | ドウ | ジョン | CCマスターカード | $1000 |
+--------+--------+--------------------+------------ ------+---------------+---------------+
これがSQLFiddleのデモです