(我会在通用堆栈交换论坛上问这个问题,但我认为这与这里更相关。我有意在这里直接查询数据库。)
我试图选择一组具有两个不同元键和元值参数的用户。
例如,为同时具有一个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