【问题标题】:SQL combine records with same wildcard valueSQL 合并具有相同通配符值的记录
【发布时间】:2014-11-12 03:57:54
【问题描述】:

我有一个 MySQL Wordpress 数据库,我正在处理结构不太好的 postmeta 表。它有四列:“meta_id、post_id、meta_key、meta_value”。这是我正在处理的查询:

SELECT  DISTINCT * 
        FROM wp_10_postmeta as pm
        JOIN wp_10_posts AS p ON pm.post_id = p.ID
        WHERE (meta_key LIKE 'personnel_%_last_name' OR
                meta_key LIKE 'personnel_%_first_name' OR
                meta_key LIKE 'personnel_%_title' OR
                meta_key LIKE 'personnel_%_alias' OR
                meta_key LIKE 'webpages_%_title' OR
                meta_key LIKE 'webpages_%_alias' OR
                meta_key LIKE 'departments_%_name' OR
                meta_key LIKE 'departments_%_alias')
            AND post_status = 'publish' AND meta_value LIKE '%john%' AND meta_value LIKE '%smith%'

问题:如果我搜索“john”或“Smith”,此查询效果很好,但如果我搜索“John Smith”,则返回空。有没有办法结合“personnel_%_last_name”和“personnel_%_first_name”然后比较?

【问题讨论】:

  • meta_value 列中有哪些值?
  • 这是一个员工和部门的目录,所以几乎只是字符串。

标签: mysql sql wordpress


【解决方案1】:

我猜您想查看多个字段以进行匹配。尝试为此使用group by

    SELECT p.*
    FROM wp_10_postmeta as pm JOIN
         wp_10_posts AS p
         ON pm.post_id = p.ID
    WHERE (meta_key LIKE 'personnel_%_last_name' OR
            meta_key LIKE 'personnel_%_first_name' OR
            meta_key LIKE 'personnel_%_title' OR
            meta_key LIKE 'personnel_%_alias' OR
            meta_key LIKE 'webpages_%_title' OR
            meta_key LIKE 'webpages_%_alias' OR
            meta_key LIKE 'departments_%_name' OR
            meta_key LIKE 'departments_%_alias')
        AND p.post_status = 'publish'
    GROUP BY p.id
    HAVING SUM(meta_value LIKE '%john%') > 0 AND SUM(meta_value LIKE '%smith%') > 0;

【讨论】:

  • 感谢您的帮助。我尝试使用 group by 方法,但是我得到了奇怪的结果,例如搜索 %michael% AND %humphries%,在我的目录中返回一个名为“Nancy”的文件。这是我的 SQL,我的 php 代码正在运行:pastebin.com/d2DzxL0w
  • 我注意到返回的总是 0 比如:personal_0_first_name。例如这里是一个搜索:pastebin.com/fpu8K7E3
  • 如果您希望匹配到特定的元键,那么您还需要将该键包含在 having 条件中:sum(meta_value like '%join%' and meta_key like 'personnel_%_first_name')
  • 嗯,不知道你的意思。我运行了这个 SQL pastebin.com/hzFb1hqf 并得到了这个:dropbox.com/s/zif0jurh74wy1lz/…
猜你喜欢
  • 2013-05-04
  • 1970-01-01
  • 2019-01-28
  • 1970-01-01
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
  • 2017-05-05
  • 1970-01-01
相关资源
最近更新 更多