MySQL |左加入wp_帖子和wp_帖子
我喜欢左键连接两个表,wp_posts和wp_posttea。在我的帖子中,我创建了几个元框选项 假设我创建了一个名为ads的自定义帖子类型,对于每个广告,我都有发布日期和到期日期作为元选项 问题是,如何从wp_posts表中连接这两个表以获取帖子的ID,其中当前日期高于post元表中的开始日期,低于post元表中的过期日期 对于非WP用户,WP_posts表是一个传统表,其中每一行代表一篇文章,WP_Posteta是一个键值pare表,其中基于文章id,包含多行来描述文章的元选项 有没有办法在单个MySQL查询中进行该查询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,包含多行来描述文章的元选项 有没有办法在
亲切问候。我认为你的意思是开始日期就是出版日期 如果没有模式定义,我将猜测列名和数据类型 一种方法是在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,生成的空值虚拟行将替换匹配行。,