2017-11-11 95 views
0

我试着搜索相关的查询语句并应用但不工作。如何加入不同的表格?

我想在一个GET调用中加入我所有的api表,并且我无法执行它。查询失败并获取错误。

我的查询看起来像这样的表我已经显示。

SELECT projects.*, images.*, rewards.*, shipping.* 
FROM projects 
LEFT JOIN rewards ON rewards.projects_id = projects.id 
LEFT INNER JOIN rewards ON rewards.id = shipping.reward_id 
LEFT JOIN images ON projects.id = images.project_id 
WHERE projects.id = 1 

enter image description here

我想加入的奖励和运输与所有的表,项目回报有一个关系到许多和奖励航运也一对多。我怎么能结合在一个查询中的所有这一切?我也尝试子查询,但我不知道如何使这些表中的查询。 请解释一下如何在子查询或联接中工作? 如果不是很好的做法,请说明我的其他技术。

UPDATE

我试图像这样使用子查询它说未知列运送

SELECT projects.*, rewards.*, images.image, shipping = (SELECT * 
FROM shipping 
WHERE shipping.reward_id IN (SELECT * FROM rewards WHERE rewards.project_id = 1)) 
FROM projects JOIN rewards ON rewards.project_id = projects.id 
LEFT JOIN images ON projects.id = images.project_id 
WHERE projects.id = 1 
+1

你在哪里找到这个'LEFT INNER JOIN'? 请为你的桌子分享'show create table'并且你想要得到的最终结果 – AnouarZ

+1

如果你要从这四张桌子中选择所有的数据,你将不知道哪个图像与哪个奖励结合在一起,所以结果将会因为每个图像都会与每一个奖励结合在一起。您应该提供样本数据和您想要的样本数据的输出。 – trincot

+0

嗨。请合理地格式化该代码。另请阅读并在[mcve]上采取行动。并阅读关系数据库的介绍 - 你的问题只是要求一个。同样谷歌SO为您的标题/问题的变化的例子。 – philipxy

回答

1

您的查询有几个语法问题。要加入的所有表格中,你可以这样写:

SELECT projects.title, rewards.price, images.images, shipping.shipping 
FROM  projects 
LEFT JOIN images ON images.project_id = projects.id 
LEFT JOIN rewards ON rewards.project_id = projects.id 
LEFT JOIN shipping ON shipping.rewards_id = rewards.id 
WHERE  projects.id = 1 

,但请注意,如果你有许多图像和许多奖励为同一个项目,这个查询会产生图像和奖励的所有组合,因为您的数据库模式不会定义哪个图像属于哪个奖励。

+0

谢谢,它的工作。那就是示例表和查询。它也适用于我真正的查询。但表格数据重复,因为我有1:m的关系。你能建议我如何过滤?如果不是,我会在PHP中做到这一点。 –

+0

如果您要求获得'null'值而不是重复值,那么是的,您应该在PHP中执行此操作。尽管可以在SQL中完成,但它不是SQL的角色,并且会使查询变得相当复杂,并且输出难以订购。用PHP做。 – trincot