使用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元键值?如果是这样的话,内部连接
是最好的,否则左连接
可以工作,但看起来需要额外的工作。这是可行的,我会仔细研究,直到我弄清楚它背后的逻辑。。。非常感谢你!这是可行的,我会仔细看看,直到我弄明白背后的逻辑。。。非常感谢你!