我想创建一个查询从主表(WordPress用户表)和用户元表获取信息。Compex MySQL左连接使用meta表中的多个条目
如果您不熟悉WP DB体系结构:wp_users包含基本用户信息及其ID,wp_usermeta包含ID,meta_key和meta_value。
比方说,我想让所有具有特定meta_keys和meta_values的用户。这是我现在有(基于可用meta_keys通过PHP产生)查询:
SELECT ID,
user_email,
user_login,
first_name.meta_value as first_name,
last_name.meta_value as last_name,
phone_number.meta_value as phone_number,
wp_capabilities.meta_value as wp_capabilities
FROM wp_users,
(select * from wp_usermeta where meta_key = 'first_name') as first_name,
(select * from wp_usermeta where meta_key = 'last_name') as last_name,
(select * from wp_usermeta where meta_key = 'phone_number') as phone_number,
(select * from wp_usermeta where meta_key = 'wp_capabilities') as wp_capabilities
WHERE
ID = first_name.user_id AND
ID = last_name.user_id AND
ID = phone_number.user_id AND
ID = wp_capabilities.user_id AND
wp_wpi_capabilities.meta_value LIKE '%administrator%'
ORDER BY first_name
这做得很好,但是如果某个用户缺少实例meta_key,“姓氏”,即用户行不根本没有得到回报。所以我真正需要的是一种为缺失的元键返回Null值的方法。
现在,我有一个非常黑客的函数,它会为所有没有给定meta_key的用户创建空白的meta_keys和meta_values,并返回它们。这是一个很糟糕的方式,虽然当你有超过一千个用户时,你需要添加一个新的meta_key类型。
让我知道是否有人这样做,或者如果我需要更好地解释。
谢谢。
为什么不把它的第3适当LEFT JOIN?现在你正在做正确的连接.... – Wrikken 2010-09-17 12:47:49