我正在努力使用wordpress的选择查询,这是无效的。奇怪的是我有2个选择查询,1个在当前运行的网站上工作。并且在本地测试机器上几乎相似的选择查询并且无法正常工作。
以下是来自live的查询,其中有效:
SELECT DISTINCT users.*
FROM wp_users as users
INNER JOIN wp_usermeta as mt
ON (users.ID = mt.user_id)
WHERE 1=1
AND (mt.meta_value LIKE '%Trainer%')
AND (mt.meta_key = '_upme_search_cache' AND mt.meta_value LIKE '%ACTIVE%')
AND ( (mt.meta_key = '_upme_search_cache' AND mt.meta_value NOT LIKE '%administrator%')
AND (mt.meta_key = '_upme_search_cache' AND mt.meta_value NOT LIKE '%sportentrainer%') )
ORDER BY users.user_registered asc LIMIT 9
这里来自本地机器的查询:
SELECT DISTINCT users.*
FROM wp_users as users
INNER JOIN wp_usermeta as mt
ON (users.ID = mt.user_id)
WHERE 1=1
AND (mt.meta_value LIKE '%trainer%')
AND (mt.meta_key = 'sent_activation_status' AND mt.meta_value LIKE '%ACTIVE%')
AND ( (mt.meta_key = 'account_type' AND mt.meta_value NOT LIKE '%administrator%')
OR (mt.meta_key = 'account_type' AND mt.meta_value NOT LIKE '%sportentrainer%') )
ORDER BY users.user_registered asc LIMIT 9
第二个查询的meta_key在单独搜索时都可以找到。您注意到meta_keys不同,但这不是问题。
第一个查询在phpmyadmin的实时版本上运行:4.1.9和mysql:5.0.12(如果我是正确的),第二个查询在本地版本的phpmyadmin上运行:4.6.6和mysql:5.6.35
有人能看出为什么第二个查询无效吗?
答案 0 :(得分:0)
由于以下条件,它不会返回任何结果:
AND (mt.meta_key = 'sent_activation_status' AND mt.meta_value LIKE '%ACTIVE%')
AND ((mt.meta_key = 'account_type' AND mt.meta_value NOT LIKE '%administrator%')
OR (mt.meta_key = 'account_type' AND mt.meta_value NOT LIKE '%sportentrainer%'))
如果你看一下上面的情况,就说mt.meta_key = 'sent_activation_status' AND mt.meta_key = 'account_type'
,现在,这是不可能的,因为meta_key
不能sent_activation_status
和account_type
同时。
如果您想获得结果,则需要使用OR
而不是AND
。