【问题标题】:How to Count Times an ID Appears in a Column in a Different Table如何计算 ID 在不同表的列中出现的次数
【发布时间】:2020-01-23 21:19:50
【问题描述】:

提前道歉:我确信这相对容易,并且被问到令人作呕,但我就是想不出正确的搜索。

基本上,我正在尝试获取从一个表中查询的 ID 列表,然后查看哪些 ID 不会出现在另一个表的单独列中。

这是一个 Wordpress MySQL 数据库。作者通过元数据附加到帖子。作者和帖子都被视为用于数据库目的的帖子。有一张表包含两个帖子/作者:wp_posts/wp。还有另一个表包含附加到帖子/作者的元数据:wp_postmeta/wm

我正在尝试从wp_posts 中获取作者列表,并通过检查wp_postmeta 中名为meta_value 的列来查看哪些是孤儿,即未附加到帖子中。

通过将来自 wp_posts 的作者 ID 显示在帖子的 wm.meta_value 列中,将作者与帖子相关联。但是作者本身是通过在同一列中具有 'author' 值来声明的。因此,ID 为17078 的作者将在wm.meta_value 中具有'author' 值,而归因于该作者的帖子将在wm.meta_value 中具有17078

通过返回我们数据库中的所有作者,以下查询让我走到了一半:

    SELECT 
        post_title,
        ID
    FROM
        wp_posts wp
    JOIN
        wp_postmeta wm
    ON
        wp.ID = wm.post_id
    WHERE
        wm.meta_value = 'author'

我需要以某种方式获取返回的列表并突出显示哪些 ID 未显示在所有帖子的 wm.meta_value 列中。任何建议或指导将不胜感激。

【问题讨论】:

  • 我无法理解您需要查找的内容。您能否举例说明记录的情况以及预期的输出是什么?

标签: mysql sql database wordpress


【解决方案1】:

下面你需要吗-

SELECT ID
FROM wp_postmeta wm
WHERE wm.meta_value = 'author'
AND NOT EXISTS (SELECT 1
                FROM wp_postmeta wm2
                WHERE wm2.ID = wm.ID)

【讨论】:

    【解决方案2】:

    尝试这样的事情 (view on DB Fiddle):

    WITH 
    authors AS (
       SELECT post_id
       FROM wp_postmeta wm
       WHERE wm.meta_value = 'author' 
    ),
    posts AS (
       SELECT post_id, (meta_value +0) AS author_id
       FROM wp_postmeta wm
       WHERE wm.meta_value <> 'author' 
    )
    SELECT post_id
    FROM authors
    WHERE NOT EXISTS (
         SELECT 1
         FROM posts
         WHERE authors.post_id = posts.author_id 
    );
    

    【讨论】:

    • 感谢您的帮助,可惜我们的 MySQL 版本仍然卡在 5.7
    【解决方案3】:

    感谢其他答案提供的提示,我最终提出的查询是:

      SELECT 
        wm.post_id
      FROM
        wp_postmeta wm
      WHERE
        wm.meta_value = 'author'
      AND NOT EXISTS (
        SELECT 1
        FROM wp_postmeta wm2
        WHERE wm2.meta_key = '_author'
        AND wm2.meta_value LIKE CONCAT('%"',wm.post_id,'"%')
      )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-29
      • 2012-07-12
      • 2015-06-07
      • 1970-01-01
      相关资源
      最近更新 更多