【问题标题】:While joining it to wp_posts, how can I put all the values of wp_postmeta table in one row?将它加入 wp_posts 时,如何将 wp_postmeta 表的所有值放在一行中?
【发布时间】:2017-09-24 22:08:23
【问题描述】:

我想像这样加入 wp_posts 和 wp_postmeta 表:

SELECT wp_posts.id, wp_posts.post_title, wp_posts.post_author, wp_postmeta.meta_key, wp_postmeta.meta_value
FROM wp_posts 
LEFT JOIN wp_postmeta ON wp_posts.id = wp_postmeta.post_id
WHERE post_type = 'job';

但是我需要 wp_postmeta 表中键值对的值在一行中;这样选择语句看起来像这样:

SELECT wp_posts.id, wp_posts.post_title, wp_posts.post_author, wp_postmeta.meta_key1, wp_postmeta.meta_key2, wp_postmeta.meta_key3, wp_postmeta.meta_key4

这就是 wp_postmeta 表中 3 行的显示方式:

**post_id 元键元值** 23841 工作开始 1488386107 23841 job_requirements 空 23841 job_employment 全职

如何通过 select 语句修改每个 post_id 的 meta_values 放在 select 语句结果的一行中?任何帮助表示赞赏。

【问题讨论】:

    标签: php mysql wordpress


    【解决方案1】:

    这是我一直在寻找的解决方案。基于 post_id,这允许我将 wp_postmeta 的 meta_values 与 wp_posts 的列值放在一行中:

    SELECT  wp_posts.ID, wp_posts.post_title,  wp_posts.post_author, pm1.meta_value as job_start_date, pm2.meta_value as job_end_date 
    FROM wp_posts 
    LEFT JOIN wp_postmeta AS pm1 ON (wp_posts.ID = pm1.post_id AND pm1.meta_key='job_start')
    LEFT JOIN wp_postmeta AS pm2 ON (wp_posts.ID = pm2.post_id  AND pm2.meta_key='job_end') 
    WHERE wp_posts.post_type = 'job';
    

    我在这里找到了这个解决方案:http://subharanjan.com/sql-query-to-get-post-and-its-meta_values-as-one-row-of-record-single-data-grid/

    如果我没有清楚地表达我的问题,我很抱歉。

    【讨论】:

      【解决方案2】:

      如果您在 wp_postmeta 的字段上添加星号(),例如wp_postmeta。 这意味着您将获得它的所有列。

      SELECT wp_posts.id, wp_posts.post_title, wp_posts.post_author, wp_postmeta.*
      FROM wp_posts 
      LEFT JOIN wp_postmeta ON wp_posts.id = wp_postmeta.post_id
      WHERE post_type = 'job';
      

      试试看。

      【讨论】:

      • 感谢您的回复,这是一个有用的建议,但我的问题是 wp_postmeta 表中的值以键值对的形式出现在 meta_key 和 meta_value 列中。有没有办法让所有 meta_values 出现在与该值关联的 meta_key 的列名下的一行中?这是它们在 wp_postmeta 表中的显示方式: 23841 job_start 1488386107 23841 job_requirements null 23841 job_employment 全职 我可以在加入时将所有元值放在一行中吗?
      • 我认为你不能那样做。除非您在 PHP 中创建一个脚本,该脚本允许您在数据库中创建一个视图,该视图以您想要的方式显示它。您可以查询所有这些,但实际上不能仅使用 MySQL 将 meta_key 作为列名。您可以使用 PHP 实现这一目标
      猜你喜欢
      • 2018-07-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-02
      • 2018-08-30
      相关资源
      最近更新 更多