[英]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.