使用group_concat和类别搜索进行多个类别连接

时间:2013-11-01 11:25:11

标签: php mysql sql

我需要通过搜索具有特定类别的业务

来查找具有组concat的业务的所有类别
|------ business -------- |
|-business_id
|-business_name
|-business_city

|------ business_cat_map ----|
|-id
|-business_id
|-cat_id

|------ cat --------------|
|-cat_id
|-cat_name

这是简单的多类别关系

现在我想在数据库中查询其类别为(例如酒店)的商家,并使用group_concat()返回商家所属的所有猫的详细信息。

我正在玩这种查询,但似乎无法正常工作

SELECT  a.*
        GROUP_CONCAT(c.cat_name) as cats
FROM    business a
        INNER JOIN business_cat_map b
        ON a.business_id = b.business_id
        INNER JOIN cat c 
        ON c.cat_id = b.cat_id 
WHERE cat_name = 'Motels'

GROUP BY a.business_id

我获得了所需的业务,但只获得了group_concat()中的Motels类别[显然是由于条件cat_name ='Motels']

所以有人告诉我如何在单个查询中执行此操作。我不想使用2个查询。

这里是数据

| ------------ 业务 -------------- |

| business_id | BUSINESS_NAME | business_city

enter image description here

| ------ business_cat_map -------------- |

| ------ ------ ID | --- --- business_id | --cat_id-- |

enter image description here

| -------- cat ---------------- |

| ----- ----- ID | ------ cat_name ---- |

enter image description here

我的查询返回以下

business_id | -business_name- | --cats-- |

enter image description here

所以在这里,我只得到一只猫,但是我想要在猫栏中显示多只猫

2 个答案:

答案 0 :(得分:1)

老兄,这是你的回答

答案 1 :(得分:0)

SELECT  a.*
        GROUP_CONCAT(c.b_type_name) as cats
FROM    business a
        INNER JOIN business_cat_map b
        ON a.business_id = b.business_id
        INNER JOIN cat c 
        ON c.cat_id = b.cat_id 
WHERE a.business_id in (
        select x.business_id from business_cat_map AS x where x.cat_id = (
            select y.cat_id from cat AS y where y.cat_name = 'Hotels'
        )
        )

GROUP BY a.business_id