2015-02-23 128 views
0

你可以请你给我的关于mysql连接问题的建议。mySql一对多关系表结构

我的表结构:

place table: place_id place_name city
1 Hotel Golconda Hyderabad 2 Paradise Hotel Hyderabad 3 Hotel Mayuri Hyderabad

place_tags tag_id tag_name 1 Valet Parking 2 Air Conditioned 3 Buffet 4 Bar 5 Family Dining

places_info Table: place_id tag_id 1 1 1 2 1 3 2 1 2 5 3 1 3 4

以上是我所有的表被包含在地方台的地名和地址,餐厅标签表的设施映射的所有设施places_info表中的每个地方。

这是我的餐桌结构是否正确,以获得“代客停车和自助餐”的地方。如何编写一个连接查询来获得这种类型的结果。

最重要的是,我们在地方表和地方信息表中都有数百万个地方。如何用这种类型的表结构实现最高性能?或者我需要改变桌子的结构吗?

请指导我。

回答

0

This'd是“有代客泊车和自助场所”的基本结构:

SELECT place_id, COUNT(places_info) AS cnt 
FROM place 
LEFT JOIN places_info ON place.place_id = places_info.place_ID 
    AND tag_id IN (1, 3) 
        ^^^^---- two tags: valet(1) + buffet(3) 
GROUP BY place.place_id 
HAVING cnt = 2 
      ^^^---- must have both tags 

对于那些既没有标签,或者只有一个名额,计数会回来0,或1 ,并被HAVING条款倾销。

+0

查询中有“GROUP BY”和“HAVING”子句,它在“places”和“places_info”表中包含数百万条记录的表上运行时会出现任何性能问题?如果是的话,我怎么能过来呢? – 2015-02-23 19:18:08