MySQL在一个查询中将两个表连接在一起

时间:2013-02-20 12:27:04

标签: php mysql

我有2个问题要加入,我以前从未真正做过。希望你们其中一个明亮的火花可以提供帮助。

它正在展示出售的商家。第一个查询没问题。

SELECT DISTINCT * FROM businesses WHERE business_asking_price > 1 AND business_location = 11 ORDER BY business_id DESC

以上搜索特定价格内的所有商家以及查找伦敦的所有商家。

到目前为止一切顺利。

但我遇到的头痛是商业类型。一个企业(比如理发师)可以有多种类型的商业类型。在这种情况下,它是健康/美容和美发沙龙。

因此类别位于另一个名为bus_parents的表中:

bus_parent_id  |   bus_parent_parent | bus_parent_child

176            |          56         |         42
177            |          56         |         43
181            |          56         |         46
202            |          56         |         57

bus_parent_id显然是唯一ID

bus_parent_parent是业务类型标识

bus_parent_child是业务ID

所以我真的想把这两个查询包装在一起,这样它就可以找到所有第一个查询的业务,然后进一步缩小它们,这样它才能显示bus_parent_parent中的业务。

希望我已经明确了我要做的事情。

我是追求加入还是其他什么?

4 个答案:

答案 0 :(得分:0)

使用JOIN尝试以下SQL:

SELECT DISTINCT businesses.* 
FROM businesses 
INNER JOIN bus_parents ON businesses.business_id = bus_parents.bus_parent_child 
WHERE businesses.business_asking_price > 1 
AND businesses.business_location = 11 
AND bus_parents.bus_parent_parent = 56 
ORDER BY businesses.business_id DESC

它会检索所有类型为id = 56的商家,您可以根据需要更改此参数。

根据您对bus_parents中每个字段的描述,我使用JOIN来检索所需的结果。 (缩小业务类型ID)

答案 1 :(得分:0)

如果我理解正确,我想你想要这样的事情:

SELECT DISTINCT * FROM businesses 
LEFT JOIN business_type ON business_type.bus_parent_child = business.id 
WHERE business_asking_price > 1 AND business_location = 11 
AND business_type.bus_parent_parent = <Your desired parent> 
ORDER BY business_id DESC

这是将业务加入business_type.bus_parent_child = business.id

上的business_type

type.bus_parent_parent

上添加一个WHERE子句

答案 2 :(得分:0)

SELECT DISTINCT businesses.* 
FROM businesses a
INNER JOIN bus_parents b ON a.business_id = b.bus_parent_parent 
WHERE a.business_asking_price > 1 
AND a.business_location = 11 
ORDER BY a.business_id DESC

答案 3 :(得分:0)

SELECT * FROM businesses b WHERE business_asking_price > 1 AND business_location = 11 

and (select bus_parent_id from bus_parents where bus_parent_child=b.bussiness_id and bus_parent_parent=in(56,57,58) limit 1) != NULL

ORDER BY business_id DESC

这里我假设bussiness_id是business表的主键列。

你应该避免在大型查询中使用distinct,因为它对大型表格来说非常繁重(慢)。特别是如果你要求很多列。