Select 来自 wordpress (woocommerce) 中两个表的不同值
Select distinct values from two tables in wordpress (woocommerce)
我正在努力:
- Select 不同的(到 ID)ID(post 标识)和 post_title 来自 wp_posts 其中 post_status = 发布和 post_type =产品;
- Select 不同于 post_id post_id 和 meta_value 来自 wp_postmeta;
我需要使用一个 select 语句来完成此操作,因此我已经尝试了尽可能多的尝试和搜索。我最后试过的是这个:
SELECT a.ID,a.post_title,b.post_id,b.meta_value FROM
(
SELECT DISTINCT ID FROM wp_posts
UNION
SELECT DISTINCT post_id FROM wp_postmeta
) x LEFT JOIN
wp_posts a ON x.ID = a.ID LEFT JOIN
wp_postmeta b ON x.post_id = b.post_id
但是,当我尝试时,它告诉我:
#1054 - 'on clause'
中的未知列 'x.post_id'
我什么都没想,有人能帮我吗?
----编辑----
@Rahul,
这很好,但仍然 returning 非不同值,我正在使用它,(注意,公共列:a.ID = yy.post_id):
SELECT a.ID, a.post_title, b.post_id, b.meta_value FROM wp_posts a
LEFT JOIN (
SELECT DISTINCT ID
FROM wp_posts
)xx ON a.ID = xx.ID
LEFT JOIN (
SELECT DISTINCT post_id
FROM wp_postmeta
)yy ON a.ID = yy.post_id
LEFT JOIN wp_postmeta b ON b.post_id = yy.post_id
WHERE a.post_type = 'product'
AND a.post_status = 'publish'
LIMIT 0 , 30
是return:
ID post_title post_id meta_value
141 测试粉彩 141 1
141 特斯特粉 141 1436921168:1
141 测试粉彩 141 123
141 Pastel de Teste 141 可见
是的,因为您的子选择结果集中没有 post_id
列。您需要更改查询并将它们分开
SELECT a.ID,a.post_title,b.post_id,b.meta_value FROM
wp_posts a LEFT JOIN
( SELECT DISTINCT ID FROM wp_posts ) xx ON a.ID = xx.ID
LEFT JOIN ( SELECT DISTINCT post_id FROM wp_postmeta ) yy
ON a.some_common_column = yy.some_common_column
LEFT JOIN wp_postmeta b ON b.post_id = yy.post_id;
编辑:
根据您的编辑 post;您需要获取行号并获取不重复的行号,例如
SELECT ID, post_title, post_id, meta_value
FROM (
SELECT a.ID,
a.post_title,
b.post_id,
b.meta_value,
(@row_number:=@row_number + 1) AS rownum
FROM wp_posts a
JOIN (SELECT @row_number:=0) r
LEFT JOIN wp_postmeta b ON a.ID = b.post_id ) xxx
WHERE rownum = 1;
我正在努力:
- Select 不同的(到 ID)ID(post 标识)和 post_title 来自 wp_posts 其中 post_status = 发布和 post_type =产品;
- Select 不同于 post_id post_id 和 meta_value 来自 wp_postmeta;
我需要使用一个 select 语句来完成此操作,因此我已经尝试了尽可能多的尝试和搜索。我最后试过的是这个:
SELECT a.ID,a.post_title,b.post_id,b.meta_value FROM ( SELECT DISTINCT ID FROM wp_posts UNION SELECT DISTINCT post_id FROM wp_postmeta ) x LEFT JOIN wp_posts a ON x.ID = a.ID LEFT JOIN wp_postmeta b ON x.post_id = b.post_id
但是,当我尝试时,它告诉我:
#1054 - 'on clause'
中的未知列 'x.post_id'我什么都没想,有人能帮我吗?
----编辑----
@Rahul,
这很好,但仍然 returning 非不同值,我正在使用它,(注意,公共列:a.ID = yy.post_id):
SELECT a.ID, a.post_title, b.post_id, b.meta_value FROM wp_posts a LEFT JOIN ( SELECT DISTINCT ID FROM wp_posts )xx ON a.ID = xx.ID LEFT JOIN ( SELECT DISTINCT post_id FROM wp_postmeta )yy ON a.ID = yy.post_id LEFT JOIN wp_postmeta b ON b.post_id = yy.post_id WHERE a.post_type = 'product' AND a.post_status = 'publish' LIMIT 0 , 30
是return:
ID post_title post_id meta_value
141 测试粉彩 141 1
141 特斯特粉 141 1436921168:1
141 测试粉彩 141 123
141 Pastel de Teste 141 可见
是的,因为您的子选择结果集中没有 post_id
列。您需要更改查询并将它们分开
SELECT a.ID,a.post_title,b.post_id,b.meta_value FROM
wp_posts a LEFT JOIN
( SELECT DISTINCT ID FROM wp_posts ) xx ON a.ID = xx.ID
LEFT JOIN ( SELECT DISTINCT post_id FROM wp_postmeta ) yy
ON a.some_common_column = yy.some_common_column
LEFT JOIN wp_postmeta b ON b.post_id = yy.post_id;
编辑:
根据您的编辑 post;您需要获取行号并获取不重复的行号,例如
SELECT ID, post_title, post_id, meta_value
FROM (
SELECT a.ID,
a.post_title,
b.post_id,
b.meta_value,
(@row_number:=@row_number + 1) AS rownum
FROM wp_posts a
JOIN (SELECT @row_number:=0) r
LEFT JOIN wp_postmeta b ON a.ID = b.post_id ) xxx
WHERE rownum = 1;