使用PHP+;MySQL左连接以合并来自2个查询的结果

使用PHP+;MySQL左连接以合并来自2个查询的结果,php,mysql,left-join,jointable,Php,Mysql,Left Join,Jointable,这就是我被卡住的地方。我有两个表,我正试图从中提取信息。一个表包含id和post\u title列下的相关数据,另一个表包含post\u id、meta\u key和meta\u value列下的数据 我有一个存储在$in中的数字数组,通过它我可以过滤两个表中的数据 要从第一个表返回id和post\u title,简单的操作如下: $query = "SELECT id, post_title FROM wplz_posts WHERE id IN ($in)"; 这当然会返回一个名称和该名称

这就是我被卡住的地方。我有两个表,我正试图从中提取信息。一个表包含
id
post\u title
列下的相关数据,另一个表包含
post\u id
meta\u key
meta\u value
列下的数据

我有一个存储在
$in
中的数字数组,通过它我可以过滤两个表中的数据

要从第一个表返回
id
post\u title
,简单的操作如下:

$query = "SELECT id, post_title FROM wplz_posts WHERE id IN ($in)";
这当然会返回一个名称和该名称的唯一ID,例如:

[id] => 8 
[post_title] => Rustic Wooden Chair
然而,我还想获取一个与上面返回的
id
相关联的价格,一个简单的查询如下所示:

$query = "SELECT meta_value 
FROM wplz_postmeta 
WHERE post_id IN ($in) AND meta_key = '_price'";

我的问题是,我希望能够通过一个查询而不是两个查询将所有这些数据返回到单个数组,这样一来,
post\u title
meta\u值都将对应于
$in
中的每个数字(例如,8)这将允许我将查询返回到一个数组,然后根据需要在该数组中循环。老实说,我在这方面花了不少时间,我认为我要做的是“左加入”,但在多个视频和教程之后,我还没有弄清楚如何让这项难以捉摸的技术发挥作用。谢谢你的帮助。:)

如果联接的每一侧正好有一行,则您要查找的是
内部联接
,而不是
左侧联接

SELECT id, post_title,meta_value FROM wplz_posts
INNER JOIN wplz_postmeta
ON wplz_postmeta.post_id=wplz_posts.id
WHERE wplz_posts.id IN ($in)
AND meta_key = '_price'

但是,如果在某些情况下只有一个表具有匹配的记录,则可以调整联接的性质

如果联接的每一侧正好有一行,则您要查找的是
内部联接
,而不是
左联接

SELECT id, post_title,meta_value FROM wplz_posts
INNER JOIN wplz_postmeta
ON wplz_postmeta.post_id=wplz_posts.id
WHERE wplz_posts.id IN ($in)
AND meta_key = '_price'

但是,如果在某些情况下只有一个表具有匹配的记录,则可以调整联接的性质

您可能希望执行如下的
内部联接:

$query = "SELECT p.id, p.post_title, pm.meta_value
FROM wplz_posts p
INNER JOIN wplz_postmeta pm ON pm.post_id=p.id
WHERE p.id IN ($in)
AND pm.meta_key = '_price'";

您需要在
id
post\u id
键上加入,但还需要根据meta\u键值(即_price

过滤加入。您需要执行一个
内部加入
,如下所示:

$query = "SELECT p.id, p.post_title, pm.meta_value
FROM wplz_posts p
INNER JOIN wplz_postmeta pm ON pm.post_id=p.id
WHERE p.id IN ($in)
AND pm.meta_key = '_price'";

您需要在
id
post\u id
键上加入,还需要根据meta\u键值(即_price

过滤加入。您可以使用左加入,这是正确的。此查询将返回已联接的表。如果元表中没有与post匹配的行,
$array['meta\u value]
将为
null
。如果有多行匹配,则
id
post\u标题将被复制

如果您事先知道每个帖子至少有一个元值,那么可以使用内部连接


您可以使用左联接,这是正确的。此查询将返回已联接的表。如果元表中没有与post匹配的行,
$array['meta\u value]
将为
null
。如果有多行匹配,则
id
post\u标题将被复制

如果您事先知道每个帖子至少有一个元值,那么可以使用内部连接


您的所有结果是否都有一个_price元键值?如果是这样的话,
内部连接
是最好的,否则
左连接
可以工作,但看起来需要额外的工作。您的所有结果是否都有一个_price元键值?如果是这样的话,
内部连接
是最好的,否则
左连接
可以工作,但看起来需要额外的工作。这是可行的,我会仔细研究,直到我弄清楚它背后的逻辑。。。非常感谢你!这是可行的,我会仔细看看,直到我弄明白背后的逻辑。。。非常感谢你!