2013-03-02 101 views
5

我使用WP Data Tables从SQL DB创建表。在wordpress后端使用的示例代码如下所示:自定义帖子类型和多个自定义字段的SQL查询

SELECT post_id, post_date 
FROM wp_posts 
WHERE post_type = 'custom_post_type' 
AND post_status = 'publish' 

我试图从后meta获得自定义字段值。以下是我迄今为止...

SELECT post_id, post_date 
FROM wp_posts 
WHERE post_type = 'custom_post_type' 
AND post_status = 'publish' 
AND SELECT custom_field_key_1, custom_field_key_2, custom_field_key_3 
FROM wp_postmeta 
WHERE post_id = post_id 

UPDATE:

我发现需要p.ID代替POST_ID和我需要搜索meta_key。喜欢的东西...

SELECT p.post_title, 
     p.post_date, 
     pm.meta_key = 'custom_field_key' 
FROM wp_posts p 
INNER JOIN wp_postmeta pm 
ON p.ID = pm.post_id 
WHERE p.post_type = 'custom_post_type' 
AND p.post_status = 'publish' 
+0

我相信你需要'加入'在这里。 – 2013-03-02 00:15:07

回答

0

假设标准的SQL支持,你需要像这样(未经):

SELECT w.post_id, w.post_date, m.custom_field_key_1, m.custom_field_key_2, m.custom_field_key_3 
FROM wp_posts w, wp_postmeta m 
WHERE post_type = 'custom_post_type' AND post_status = 'publish' 
AND w.post.id = m.post.id 
4

使用的INNER JOIN

SELECT p.post_id, 
     p.post_date, 
     pm.custom_field_key_1, 
     pm.custom_field_key_2, 
     pm.custom_field_key_3 
FROM wp_posts p 
    INNER JOIN wp_postmeta pm 
     ON p.post_id = pm.post_id 
WHERE p.post_type = 'custom_post_type' 
    AND p.post_status = 'publish' 
+0

这类作品和我包含了更新。 – user2106176 2013-03-02 00:47:09

+0

@ user2106176 - 很高兴这有帮助。看看你的更新,我认为你需要将“pm.meta_key ='custom_field_key'”移到你的WHERE子句中。您不能在您的SELECT语句中设置字段值。祝你好运! – sgeddes 2013-03-02 01:30:44

+0

将p.post_id更改为p.ID为我工作。 – 2015-01-14 00:48:25

0

你可以试试这个。

SELECT p.post_id, p.post_date, 
    pm.custom_field_key_1, pm.custom_field_key_2, pm.custom_field_key_3 
FROM wp_posts p 
JOIN wp_postmeta pm ON p.post_id = pm.post_id 
WHERE p.post_type = 'custom_post_type' 
AND p.post_status = 'publish' 
0

好的,即使你更新了答案。我把你的榜样和我合作了这一点:

SELECT p.ID, 
     p.post_title, 
     pm.meta_value as 'value1', 
     pma.meta_value as 'value2' 

FROM wp_posts p 
     INNER JOIN wp_postmeta AS pm ON pm.post_id = p.ID 
     INNER JOIN wp_postmeta AS pma ON pma.post_id = p.ID 

WHERE 
     pma.meta_key = 'custom_field_key_1' AND 
     pm.meta_key = 'custom_field_key_2' AND 

     p.post_type = 'your_post_type' AND 
     p.post_status = 'publish' 

所以在这里我使用别名AS在同一台主机值,INNER JOINwp_postmetapost_id,这一切。

参考文献: Multiple Inner join same table

这样做,你会得到一个数组的帖子和您选择的自定义字段:

array(1) { 
    [0]=> object(stdClass)#341 (4) { 
      ["ID"]=> string(1) "1123" 
      ["post_title"]=> string(15) "Your post title" 
      ["custom_field_key_1"]=> string(12) "Your value 1 " 
      ["custom_field_key_2"]=> string(29) "Your value 2" 
} 

因为您可以根据需要添加尽可能多的别名和meta_key。希望这个帮助!

相关问题