Php mysql muliple使用不同的键从同一列连接
我需要一些帮助来完成下表的第二个连接。我从这里得到了一些帮助,之前有人建议我需要添加第二个连接,但是,这就是我遇到的问题,需要一些帮助 wp帖子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 | ----------------- 可湿性粉剂到达后 ------------------------
-----------------
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行中“,”之后的所有内容(结束_日期)都合并.