【问题标题】:SQL Query for Custom Post Type and Multiple Custom Fields自定义帖子类型和多个自定义字段的 SQL 查询
【发布时间】:2013-03-02 00:07:49
【问题描述】:

我正在使用WP Data Tables 从 SQL DB 创建一个表。在 wordpress 后端中,要使用的示例代码如下所示:

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

我正在尝试从帖子元中获取自定义字段值。这是我到目前为止所拥有的......

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

更新:

我发现需要 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'

【问题讨论】:

  • 我相信你需要JOIN这里。

标签: sql wordpress


【解决方案1】:

使用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'

【讨论】:

  • @user2106176 -- 很高兴这有帮助。查看您的更新,我认为您需要将“pm.meta_key = 'custom_field_key'”移动到您的 WHERE 子句中。您不能在 SELECT 语句中设置字段值。祝你好运!
  • 我知道这个答案太旧了,但现在可以使用 custom_field_key
【解决方案2】:

假设支持标准 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

【讨论】:

    【解决方案3】:

    你可以试试这个。

    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'
    

    【讨论】:

      【解决方案4】:

      好的,即使您更新了答案。我举了你的例子,我解决了这个问题:

      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 JOIN 表示 wp_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"
      }
      

      您可以根据需要添加任意数量的别名和元密钥。希望对您有所帮助!

      【讨论】:

        猜你喜欢
        • 2014-03-17
        • 1970-01-01
        • 1970-01-01
        • 2019-08-28
        • 1970-01-01
        • 2014-03-02
        • 1970-01-01
        • 1970-01-01
        • 2021-06-29
        相关资源
        最近更新 更多