欢迎来到实体-属性-值世界。
要获得结果集的正常表示,您可能不仅需要JOIN
这两个表,还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
样本输出:
+--------+--------+--------+------------ --------+----------------+---------------+
| 编号 | 状态 | 客户姓氏 | customer_firt_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'
输出:
+--------+--------+--------+------------ ---------+---------------+----------------+
| 编号 | 状态 | 客户姓氏 | 客户名字 | 付款类型 | 发票总额 |
+--------+--------+--------+------------ ---------+---------------+----------------+
| 2 | 打开 | 能源部 | 约翰 | CC-万事达卡 | 1000 美元 |
+--------+--------+--------+------------ ---------+---------------+----------------+
这是SQLFiddle演示