通过连接多个Meta Value结果选择用户

时间:2013-10-01 作者:Brent

(我会在通用堆栈交换论坛上问这个问题,但我认为这与这里更相关。我有意在这里直接查询数据库。)

我试图选择一组具有两个不同元键和元值参数的用户。

例如,为同时具有一个meta\\u key=“key1”和meta\\u value=“value1”的用户以及另一个meta\\u key=“keyA”和meta\\u value=“valueA”的同一用户选择所有用户名和ID

换句话说,对于一个用户,我有多组元数据,我在两组元数据中寻找满足标准的特定用户集。这两个元数据项之间没有关系,只是它们都应用于同一个用户。

我所面临的挑战是,我想我正在尝试将任何元数据条目留给相应的用户,而不必进行双重查询。有可能吗?

以下是我尝试过的:

SELECT wp_users.ID, wp_users.display_name
FROM wp_users LEFT JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id AND  
wp_usermeta.meta_value= \'value1\'
WHERE  wp_usermeta.meta_key = \'keyA\' AND wp_usermeta.meta_value = \'valueA\' 
我也尝试过:

SELECT wp_users.ID, wp_users.display_name
FROM wp_users LEFT JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id   
WHERE (wp_usermeta.meta_key = \'key1\' AND wp_usermeta.meta_value= \'value1\')
AND ( wp_usermeta.meta_key = \'keyA\' AND wp_usermeta.meta_value = \'valueA\') 
这两个都返回空集。我怀疑它只剩下连接到一个usermeta条目,因此当我告诉它在usermeta条目中查找与用户条目保持连接的第二组值时,它会返回一个空集。我的问题是如何过滤所有的用户元信息,以便我只能返回结果与两者匹配的用户。感谢您的关注!

--------更新--------------

这是对我有用的最后一个代码:

SELECT u.ID, u.display_name
FROM wp_users AS u 
LEFT JOIN wp_usermeta AS um1 ON u.ID = um1.user_id 
LEFT JOIN wp_usermeta AS um2 ON u.ID = um2.user_id 
WHERE  um1.meta_key = \'key1\' AND um1.meta_value = \'value1\' 
AND um2.meta_key = \'keyA\' AND um2.meta_value = \'valueA\'
LIMIT 0, 60

1 个回复
最合适的回答,由SO网友:M Khalid Junaid 整理而成

使用元数据上的其他连接尝试此操作

SELECT u.ID, u.display_name
FROM wp_users u 
LEFT JOIN wp_usermeta  um1 ON u.ID = um1.user_id
LEFT JOIN wp_usermeta  um2 ON u.ID = um2.user_id
WHERE um1.meta_value= \'value1\' AND um1.meta_key = \'key1\'
AND um2.meta_key = \'keyA\' AND um2.meta_value = \'valueA\'
GROUP BY u.ID
还使用分组依据

结束

相关推荐

如何使用WP_QUERY搜索存储在自定义字段中的数组?

我有一个名为“on air”的自定义帖子类型,其中包括一个名为“daysonair”的自定义字段。此表单中有一周中每天的复选框。添加/更新帖子时,选中的项目将作为数组存储在自定义字段中。我不知道如何将该自定义字段添加到我的WP\\u Query()搜索中:array( \'key\' => \'daysonair\', \'value\' => \'Thursday\', \'compare\' => \'IN\' ) 我尝试过多种类