2011-12-30 44 views
0

摘编架构看起来像分选的结果计数从桥接表连接

表:公寓

id | city | price ... 

表美化:

id | name 

桥接表

Apartment_id | Amenity_id 

的查询我正在尝试c onstruct会像

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 

如果我的代码,我可以遍历发现公寓,查询市容比赛和分页之前添加计数字段中的对象和排序上,但是这似乎这样做非常优雅。

是一种干净的方式来查询桥接表中匹配行数排序的Aprtment记录吗?

回答

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 
+0

你是男人!谢谢!请注意,应该读取COUNT(*)为ct,Apartment_id – jerrygarciuh 2011-12-30 14:16:20

+0

谢谢,修复了我的狡猾复制/粘贴 – gbn 2011-12-30 14:17:05

+0

如果您来到新奥尔良,我欠您的是首选饮料! – jerrygarciuh 2011-12-30 14:22:37