我想返回两个表的行和有效关联它们的查找表。有没有办法用一个查询来做到这一点?

时间:2017-07-18 22:52:48

标签: php postgresql pdo

现在我正在使用三个查询来获取我需要的行:

来自pins的主要信息:

SELECT * FROM pins
WHERE lat > 45

pins_tags中的两列将引脚与一个或多个标记相关联:

SELECT pins_tags.pin_id, pins_tags.tag_id FROM pins_tags
INNER JOIN pins
ON pins_tags.pin_id = pins.id
WHERE pins.lat > 45

最后是关于与我刚刚选择的引脚相关的标签的信息:

SELECT tags.id, tags.caption FROM tags
INNER JOIN pins_tags
ON pins_tags.tag_id = tags.id
INNER JOIN pins
ON pins_tags.pin_id = pins.id
WHERE pins.lat > 45

您可以看到我必须在每个查询中使用相同的WHERE子句来获取与我在第一个查询中返回的引脚相关联的标记。这很好,并返回我想要的三个数组。但我觉得我没有看到更有效的方法来做到这一点。有吗?

1 个答案:

答案 0 :(得分:0)

我的理解:选择所有tags和相应的"详情"来自pins_tagspins。您可以自己选择要提取的列。

SELECT 
    tags.*
    pins_tags.*,
    pins.*
FROM tags
LEFT JOIN pins_tags ON pins_tags.tag_id = tags.id
LEFT JOIN pins ON pins.id = pins_tags.pin_id
WHERE pins.lat > 45

注意:与标题比较的问题文本非常混乱。请再次自己阅读,但是从不知道你为什么使用3个语句的用户的角度来看(数组?! - 可能与你在PHP中应用的内容有什么关系?)以及究竟是什么你想实现: - )

祝你好运。