mysql - Compex MySQL Left Join 使用元表中的多个条目

标签 mysql wordpress metadata left-join

我正在尝试创建一个查询来从主表(WordPress 用户表)和用户元表中获取信息。

如果您不熟悉 WP 数据库架构:wp_users 保存基本用户信息及其 ID,wp_usermeta 保存 ID、meta_key 和 meta_value。

假设我想要获取所有具有特定元键和元值的用户。这是我目前的查询(根据可用的 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,例如“last_name”,则根本不会返回该用户行。所以我真正需要的是一种为缺少的元键返回 Null 值的方法。

现在我有一个非常 hackish 的函数,它会为所有没有给定 meta_key 的用户创建空白的 meta_keys 和 meta_values,这样他们就会被返回。这是一种糟糕的方式,当你有超过一千个用户时,你需要添加一种新的 meta_key。

让我知道是否有人这样做过,或者我是否需要更好地解释。

谢谢。

最佳答案

将 usermeta 连接条件放在连接中,而不是在子查询中苦苦挣扎:

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
    JOIN wp_usermeta AS wp_capabilities ON wp_capabilities.user_id=ID
        AND wp_capabilities.meta_key='wp_capabilities'
    LEFT JOIN wp_usermeta AS first_name ON first_name.user_id=ID
        AND first_name.meta_key='first_name'
    LEFT JOIN wp_usermeta AS last_name ON last_name.user_id=ID
        AND last_name.meta_key='last_name'
    LEFT JOIN wp_usermeta AS phone_number ON phone_number.user_id=ID
        AND phone_number.meta_key='phone_number'
WHERE
    wp_capabilities.meta_value LIKE '%administrator%'
ORDER BY
    first_name

关于mysql - Compex MySQL Left Join 使用元表中的多个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3735176/

相关文章:

mysql - Laravel mysql 付款后更新余额

WordPress 搜索查询 : include tags AND limit these tags to specific category

parsing - 如何解析Dart程序?

mysql - 存储自定义 MySQL 元数据 - 最佳实践

Mysql UDF 已安装(但不存在?)

php - Xpath解析xml并输入mysql

html - HTML 网站上使用的 Wordpress 革命 slider

php - 如何从WordPress数据库中获取特定结果集中倒数第三个user_id?

metadata - Markdown 元数据格式

mysql - 简单删除sql表中的重复内容