我想要检索具有多种设施的属性。mysql AND子句在同一列多次
但是表结构是:属性在property
表和设施与属性相关联。
设施表有:
id property_id amenity_name ....
现在我想寻找的是有“停车”和“电梯”等设施。
select property_id from amenities where name = 'parking' and name = 'elevator';
我不想为此发射连接查询。
那么有人可以救我在这种情况下?
我想要检索具有多种设施的属性。mysql AND子句在同一列多次
但是表结构是:属性在property
表和设施与属性相关联。
设施表有:
id property_id amenity_name ....
现在我想寻找的是有“停车”和“电梯”等设施。
select property_id from amenities where name = 'parking' and name = 'elevator';
我不想为此发射连接查询。
那么有人可以救我在这种情况下?
试试这个 - :从那里名称= '停车' 和名称= '电梯' 设施
scope :amenity_type, lambda {|term|
where("amenities.name" => term).joins(:amenities).group("amenities.property_id").having("count(amenities.name) >= #{term.size}") unless term.blank?
}
嗨Vivek,谢谢你的帮助。它只是工作:) –
select property_id
from amenities
where name in ('parking','elevator')
group by property_id
having count(distinct(name)) = 2
非常感谢尼克...这是超级工作:)。再次感谢很多 –
不客气。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work;) –
试试这个:
SELECT property_id FROM amenities
WHERE amenity_name IN ('parking', 'elevator')
GROUP BY property_id
HAVING COUNT(amenity_name) >= 2
这里的是怎么回事...
首先,获取有设施,你有兴趣的物业编号的列表:
SELECT property_id FROM amenities WHERE amenity_name IN ('parking', 'elevator')
然后缩小列表以仅包含那些属性ID的wh我有一个以上的舒适。按property_id进行分组,根据它们所属的property_id将结果捆绑到唯一的组中。然后,我们只需计算每个组中amenity_names的数量并检查它是否为2或更大。在上面的代码
GROUP BY property_id HAVING COUNT(amenity_name) >= 2
一个假设是,你不会有一个PROPERTY_ID不止一次相关联的同amenity_name。要消除与此相关的问题,请将HAVING
子句更改为包含DISTINCT
以清除重复项,但除非需要它才添加它。
GROUP BY property_id HAVING COUNT(DISTINCT(amenity_name)) >= 2
救了我。谢谢。 – BEm
选择PROPERTY_ID;将不会返回任何内容,因为名称不能同时包含两个值。你能否详细介绍一下你的桌子结构以及你想要达到的目标? –
此外,如果你希望有人继续回答你,请考虑接受一些答案。 ;) –
如果你发现一个有用的答案,接受它,以便人们将在未来阅读你的问题。 –