【问题标题】:wordpress select query not workingwordpress 选择查询不起作用
【发布时间】:2017-05-21 19:18:52
【问题描述】:

我正在为 wordpress 的选择查询而苦苦挣扎,但它不起作用。奇怪的是我有 2 个选择查询,1 个在当前正在运行的网站上并且有效。并且在本地测试机器上进行了几乎类似的选择查询并且无法正常工作。

这是来自现场的查询,它正在工作:

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 上运行

有人能看出为什么第二个查询不起作用吗?

【问题讨论】:

  • 不工作是否意味着查询没有返回您想要的结果?如果是这样,那么最好的办法可能是通过简化查询来进行调试。仅从一个AND / OR 条件开始,运行查询,检查您是否在该点之前获得数据,添加更多条件,再次验证结果并继续运行,直到发现断开连接。也许表格中实际上没有任何内容符合您的期望?或者如果有,那么条件可能没有准确地制定? MySQL 版本不应该对这个查询产生任何影响。
  • 不工作,我的意思是它返回 0 个结果。当我只使用 1 并且它返回结果。所以奇怪的是,第一个查询返回结果,但只是修改 meta_keys 会返回 0 个结果,但是当我在 phpmyadmin 中搜索这些 meta_keys 和特定值时,它也会返回结果。所以 meta_keys 就在那里。

标签: php mysql wordpress phpmyadmin


【解决方案1】:

由于以下情况,它不会返回任何结果:

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_statusaccount_type

如果你想得到结果,你需要使用OR而不是AND

【讨论】:

  • HI Darshan,谢谢回复,结果还是一样,返回0。
  • 我尝试了以下 SQL: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%') 不起作用,但仅在运行时: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%') 可以。我很困惑。
  • 谢谢,你是对的。我将不得不改变值的存储方式。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-09
  • 2016-03-30
  • 1970-01-01
  • 2012-12-31
  • 2015-06-18
相关资源
最近更新 更多