MySQL |左加入wp_帖子和wp_帖子

MySQL |左加入wp_帖子和wp_帖子,mysql,sql,wordpress,left-join,Mysql,Sql,Wordpress,Left Join,我喜欢左键连接两个表,wp_posts和wp_posttea。在我的帖子中,我创建了几个元框选项 假设我创建了一个名为ads的自定义帖子类型,对于每个广告,我都有发布日期和到期日期作为元选项 问题是,如何从wp_posts表中连接这两个表以获取帖子的ID,其中当前日期高于post元表中的开始日期,低于post元表中的过期日期 对于非WP用户,WP_posts表是一个传统表,其中每一行代表一篇文章,WP_Posteta是一个键值pare表,其中基于文章id,包含多行来描述文章的元选项 有没有办法在

我喜欢左键连接两个表,wp_posts和wp_posttea。在我的帖子中,我创建了几个元框选项

假设我创建了一个名为ads的自定义帖子类型,对于每个广告,我都有发布日期和到期日期作为元选项

问题是,如何从wp_posts表中连接这两个表以获取帖子的ID,其中当前日期高于post元表中的开始日期,低于post元表中的过期日期

对于非WP用户,WP_posts表是一个传统表,其中每一行代表一篇文章,WP_Posteta是一个键值pare表,其中基于文章id,包含多行来描述文章的元选项

有没有办法在单个MySQL查询中进行该查询


亲切问候。

我认为你的意思是开始日期就是出版日期

如果没有模式定义,我将猜测列名和数据类型

一种方法是在EXISTS谓词中使用相关子查询,尽管这可能不是最有效的方法:

SELECT p.id
  FROM wp_posts p
 WHERE EXISTS
       ( SELECT 1
           FROM wp_postmeta m1
          WHERE m1.wp_posts_id = p.id
            AND m1.meta_option_name = 'publication date'
            AND m1.meta_option_date_value <= NOW()
       )
   AND EXISTS
       ( SELECT 1
           FROM wp_postmeta m2
          WHERE m2.wp_posts_id = p.id
            AND m2.meta_option_name = 'expiration date'
            AND m2.meta_option_date_value > NOW()
       )
您特别询问了使用左联接的问题

虽然此查询实际上相当于执行内部联接操作,但使用左联接操作可以获得等效结果:

SELECT p.id
  FROM wp_posts p
  LEFT
  JOIN wp_postmeta m1
    ON m1.wp_posts_id = p.id 
   AND m1.meta_option_name = 'publication date'
   AND m1.meta_option_date_value <= NOW()
  LEFT 
  JOIN wp_postmeta m2
    ON m2.wp_posts_id = p.id
   AND m2.meta_option_name = 'expiration date'
   AND m2.meta_option_date_value > NOW()
 WHERE m1.id IS NOT NULL
   AND m2.id IS NOT NULL
 GROUP 
    BY p.id 

谢谢你的左连接示例。今天我完全恢复了记忆,帮我解决了一个排序问题。八年前,哇。我的意思是,真正等同于内部连接的是WHERE子句需要列的非空值。。。这否定了左连接的外部性,因为匹配的行中的id列永远不会为NULL,但在找不到匹配行时生成的虚拟行上,id列将为NULL,生成的空值虚拟行将替换匹配行。,