select ... 不存在的地方
select ... where not exists
我正在尝试进行自定义查询以从 wordpress 中获取帖子(它们实际上是产品),其中 没有名为 'custom_code' 的 meta_query 。
我正在尝试:
SELECT DISTINCT p.ID
FROM
wp_posts p
LEFT JOIN wp_postmeta pm ON p.ID = pm.post_id
WHERE
p.post_type = 'product'
AND ( p.post_status = 'publish' OR p.post_status = 'draft' )
AND pm.meta_key = 'custom_code' AND pm.meta_key IS NULL
我尝试使用 NOT EXISTS,但是 sql returns 错误:
SELECT DISTINCT p.ID
FROM
wp_posts p
LEFT JOIN wp_postmeta pm ON p.ID = pm.post_id
WHERE
p.post_type = 'product'
AND ( p.post_status = 'publish' OR p.post_status = 'draft' )
AND NOT EXISTS (
select * from wp_postmeta as pm2
where pm2.meta_key = 'custom_code'
)
注意:我需要将状态为 'publish' 的帖子作为状态为 'draft' 的帖子。
返回错误:
无法识别关键字。 (在 "NOT" 附近,位置 193)
无法识别关键字。 (在 "EXISTS" 附近,位置 197)
符号(令牌)意外。 (在位置 204 的“(”附近)
当前点
我用 WordPress API 做了,它有效,但我需要添加一个 LEFT JOIN 来获得名称类似于下面句子返回的每个产品名称的产品。这是句子:
$args = array(
'posts_per_page' => -1,
'post_type' =>'product',
'post_status' => 'publish,draft',
'meta_query' => array(
array(
'key' => 'custom_code',
'compare' => 'NOT EXISTS'
)),
);
$posts_array = get_posts( $args );
有什么帮助吗?
提前致谢。
NOT EXITSTS
的查询可能是这样的:
SELECT DISTINCT p.ID
FROM wp_posts AS p
WHERE p.post_type = 'product' AND
p.post_status ΙΝ ('publish', 'draft' ) AND
NOT EXISTS (select *
from wp_postmeta as pm
where p.ID = pm.post_id AND
pm.meta_key = 'custom_code')
或者,使用 LEFT JOIN
:
SELECT DISTINCT p.ID
FROM wp_posts AS p
LEFT JOIN wp_postmeta AS pm
ON p.ID = pm.post_id AND pm.meta_key = 'custom_code'
WHERE p.post_type = 'product' AND
p.post_status ΙΝ ('publish', 'draft' ) AND
pm.post_id IS NULL
你试过这样的事情吗
$args = array(
'posts_per_page' => -1,
'post_type' =>'product',
'post_status' => 'publish,draft',
'meta_query' => array(
array(
'key' => 'custom_code',
'compare' => 'NOT EXISTS'
)),
);
$posts_array = get_posts( $args );
var_dump( $posts_array );
注意
使用此代码打印查询
global $wpdb;
var_dump( $wpdb->last_query);
我正在尝试进行自定义查询以从 wordpress 中获取帖子(它们实际上是产品),其中 没有名为 'custom_code' 的 meta_query 。 我正在尝试:
SELECT DISTINCT p.ID
FROM
wp_posts p
LEFT JOIN wp_postmeta pm ON p.ID = pm.post_id
WHERE
p.post_type = 'product'
AND ( p.post_status = 'publish' OR p.post_status = 'draft' )
AND pm.meta_key = 'custom_code' AND pm.meta_key IS NULL
我尝试使用 NOT EXISTS,但是 sql returns 错误:
SELECT DISTINCT p.ID
FROM
wp_posts p
LEFT JOIN wp_postmeta pm ON p.ID = pm.post_id
WHERE
p.post_type = 'product'
AND ( p.post_status = 'publish' OR p.post_status = 'draft' )
AND NOT EXISTS (
select * from wp_postmeta as pm2
where pm2.meta_key = 'custom_code'
)
注意:我需要将状态为 'publish' 的帖子作为状态为 'draft' 的帖子。
返回错误:
无法识别关键字。 (在 "NOT" 附近,位置 193)
无法识别关键字。 (在 "EXISTS" 附近,位置 197)
符号(令牌)意外。 (在位置 204 的“(”附近)
当前点
我用 WordPress API 做了,它有效,但我需要添加一个 LEFT JOIN 来获得名称类似于下面句子返回的每个产品名称的产品。这是句子:
$args = array(
'posts_per_page' => -1,
'post_type' =>'product',
'post_status' => 'publish,draft',
'meta_query' => array(
array(
'key' => 'custom_code',
'compare' => 'NOT EXISTS'
)),
);
$posts_array = get_posts( $args );
有什么帮助吗? 提前致谢。
NOT EXITSTS
的查询可能是这样的:
SELECT DISTINCT p.ID
FROM wp_posts AS p
WHERE p.post_type = 'product' AND
p.post_status ΙΝ ('publish', 'draft' ) AND
NOT EXISTS (select *
from wp_postmeta as pm
where p.ID = pm.post_id AND
pm.meta_key = 'custom_code')
或者,使用 LEFT JOIN
:
SELECT DISTINCT p.ID
FROM wp_posts AS p
LEFT JOIN wp_postmeta AS pm
ON p.ID = pm.post_id AND pm.meta_key = 'custom_code'
WHERE p.post_type = 'product' AND
p.post_status ΙΝ ('publish', 'draft' ) AND
pm.post_id IS NULL
你试过这样的事情吗
$args = array(
'posts_per_page' => -1,
'post_type' =>'product',
'post_status' => 'publish,draft',
'meta_query' => array(
array(
'key' => 'custom_code',
'compare' => 'NOT EXISTS'
)),
);
$posts_array = get_posts( $args );
var_dump( $posts_array );
注意
使用此代码打印查询
global $wpdb;
var_dump( $wpdb->last_query);