按桥接表中的结果计数对JOIN进行排序

时间:2011-12-30 14:01:47

标签: mysql join

Abridged架构看起来像

表:公寓

id | city | price ...

表设施:

id | name

桥接表

Apartment_id | Amenity_id

我想要构建的查询类似于

SELECT * FROM Apartment a
WHERE
a.`city` = 'foo'
AND a.`price` <= 'bar'
UNION 
SELECT COUNT(*) as ct FROM Bridging b
WHERE a.id = b.Aprtment_id AND
(b.Amenity_id = 'x' OR b.Amenity_id = 'y' OR b.Amenity_id = 'z')
ORDER BY ct DESC

如果我在代码中执行此操作,我可以迭代找到的公寓,查询舒适性匹配并将该计数添加到对象中的字段并在分页前对其进行排序,但这看起来非常优雅。

查询Bridging表中匹配行数排序的Aprtment记录是一种干净的方法吗?

1 个答案:

答案 0 :(得分:2)

SELECT * 
FROM 
    Apartment a
    JOIN
    (SELECT COUNT(*) as ct, Apartment_id
    FROM Bridging
    WHERE Amenity_id IN ('x','y','z')
    GROUP BY Apartment_id 
    ) b ON a.id = b.Apartment_id 
WHERE
    a.`city` = 'foo'
    AND a.`price` <= 'bar'
ORDER BY
    b.bt DESC