Php mysql muliple使用不同的键从同一列连接

Php mysql muliple使用不同的键从同一列连接,php,mysql,wordpress,join,inner-join,Php,Mysql,Wordpress,Join,Inner Join,我需要一些帮助来完成下表的第二个连接。我从这里得到了一些帮助,之前有人建议我需要添加第二个连接,但是,这就是我遇到的问题,需要一些帮助 wp帖子 ----------------- id | Post_Title | ----------------- 01 | Event 1 | ----------------- 02 | Event 2 | ----------------- 可湿性粉剂到达后 ------------------------

我需要一些帮助来完成下表的第二个连接。我从这里得到了一些帮助,之前有人建议我需要添加第二个连接,但是,这就是我遇到的问题,需要一些帮助

wp帖子

  -----------------
  id | Post_Title | 
  -----------------
  01 | Event 1    | 
  -----------------
  02 | Event 2    | 
  -----------------
可湿性粉剂到达后

-------------------------------------------------------
  meta_id  | post_id | meta_key          | meta_value |
  -----------------------------------------------------
  456      | 01      | _EventStartDate   | 01/01/2017 |
  -------------------------------------------------- ---
  789      | 01      | _EventEndDate     | 05/02/2017 |
  -----------------------------------------------------
我追求的最终结果是:

标题-从开始到结束

我使用以下方法获取数据:

    $result = $wpdb->get_results ( "
SELECT $wpdb->posts.ID, $wpdb->posts.post_content, $wpdb->postmeta.meta_id, 

$wpdb->postmeta.post_id, $wpdb->postmeta.meta_key, $wpdb->postmeta.meta_value, $wpdb->posts.post_title 


FROM $wpdb->posts INNER JOIN $wpdb->postmeta ON $wpdb->posts.ID = $wpdb->postmeta.post_id 

WHERE $wpdb->postmeta.meta_key = '_EventStartDate' 

ORDER BY $wpdb->postmeta.meta_value " );
现在我被告知WHERE将只返回一行,我需要使用
$wpdb->postETA.meta\u key='\u EventStartDate'
进行第二次连接,但经过数小时的尝试实现后,我根本无法获取和返回数据

如果有人能帮我解决这个问题,那将是非常有帮助的,因为我还有几个问题要写,我想我也需要用同样的原则来处理它们


谢谢你的阅读

您可以使用
groupby
获得一行的开始日期和结束日期,如下所示:

select
    t1.*,
    max(case when meta_key = '_EventStartDate' then meta_value end) start_date,
    max(case when meta_key = '_EventEndDate' then meta_value end) end_date
from wp_posts t1
inner join wp_postmeta t2
on t1.id = t2.post_id
group by t1.post_id;
如果启用了
ONLY\u FULL\u GROUP\u BY
,请将GROUP BY子句更改为:

group by t1.post_id, t1.Post_title;

假设wp PosteTa中的每篇文章只有一个
\u EventStartDate
和一个
\u EventEndDate
,简化的查询是:

SELECT p.post_title, pm1.meta_value AS start_date, pm2.meta_value AS end_date 
FROM wp-posts p 
     INNER JOIN wp-postmeta pm1
             ON  p.post_id     = pm1.post_id
            AND  pm1.meta_ekey = '_EventStartDate'  
     INNER JOIN wp-postmeta pm2
             ON  p.post_id     = pm2.post_id
            AND  pm2.meta_ekey = '_EventEndDate'

您可以使用单个内部联接,按帖子ID分组,然后拆分开始日期和结束日期:

select 
wpposts.post_content,
substring_index(GROUP_CONCAT(meta_value order by str_to_date(meta_value,'%d/%m/%Y')), ',', 1) as start_date ,
substring_index(GROUP_CONCAT(meta_value order by str_to_date(meta_value,'%d/%m/%Y')), ',', -1) as end_date
from wpposts inner join wppostmeta
on wpposts.id = wppostmeta.post_id
where wppostmeta.meta_key='_EventStartDate' or wppostmeta.meta_key='_EventEndDate'
group by wppostmeta.post_id

^1
很好的回答这工作做得很好,谢谢。如果可能,第3行和第4行实际上是做什么的?我假设group by WPPOSTETA.post_id根据post id对查询中的所有内容进行分组?不,分组是通过最后一行进行的;因为meta_value有两个值(对于具有相同post_id的每组记录),所以第3-4行需要将它们合并(默认情况下,使用“,”)合并组_concat)以使它们可用于所选部分,然后使用子字符串_索引将它们拆分,将第3行中“,”之前的所有内容(开始_日期)和第4行中“,”之后的所有内容(结束_日期)都合并.