[英]SQL join table result of 2 statements
我试图通过JOIN从我的Wordpress数据库中获取SQL数据,但无法正常工作。
我需要的:
我的问题:
现在,我只获得帖子包含meta_key“ gtp_product_dont_show”的结果,但是有些帖子没有此关键字,我也需要这些。
这就是我现在所拥有的:
SELECT
ID, post_title
FROM
wp_posts p
JOIN wp_postmeta m ON
p.ID = m.post_id AND
m.meta_key = 'gtp_product_dont_show' AND
m.meta_value != 'true'
WHERE
post_type = 'products' AND
post_status = 'publish'
输出:
您需要left join
:
SELECT ID, post_title
FROM wp_posts p LEFT JOIN
wp_postmeta m
ON p.ID = m.post_id AND
m.meta_key = 'gtp_product_dont_show'
WHERE (m.meta_value is null or m.meta_value <> 'true') and
post_type = 'products' AND
post_status = 'publish';
left join
wp_postmeta
在wp_postmeta
表中寻找适当的键。 然后where
子句说“在没有匹配项或值不为真时保留记录” –我认为这是您要寻找的逻辑。
您在找这个吗?
SELECT
ID, post_title
FROM
wp_posts p
WHERE
post_type = 'products' AND
post_status = 'publish' AND
not exists (
select 1
from wp_postmeta m
where
p.ID = m.post_id AND
m.meta_key = 'gtp_product_dont_show' AND
m.meta_value = 'true')
这将从wp_posts中获取所有行,但忽略那些从wp_postmeta中找到行的行,其中meta_key为gtp_product_dont_show且value为true。
您可以使用OR
运算符同时考虑这两种情况。 尝试这个:
SELECT stuff
FROM myTable
JOIN otherTable ON
(m.meta_key = 'gtp_product_dont_show' AND m.meta_value != 'true') OR
(m.meta_key != 'gtp_product_dont_show')
...
只是附带说明,我不建议将布尔值存储为这样的字符串。 您应该考虑使用TINYINT()
,其中布尔字段存储为0(表示false)或1(表示true)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.