我的模型Lodging
有一个属性price_range
此属性包含此格式的数据89;149
(字符串格式)说这是现在我想要的89到149之间的价格区间搜索价格范围介于lodgings
之间的那些100-200
我希望通过单行查询执行此操作与Lodging.where(...
一样,是否有任何方法可以解决我的查询?
谢谢!
答案 0 :(得分:1)
抱歉,这是一个糟糕的数据库设计。我建议将您的实现迁移到使用两个db字段(可能是:low_price,high_price)。然后你可以用一个查询进行搜索。
Lodging.where(["low_pric >= ?" AND high_price <= ?], 100, 200)
可能适合你以下可以使用MySQL,但我不是舒尔。我现在无法测试它:
Lodging.
where(["(CONVERT(SUBSTRING(price_range, 1, LOCATE(';',price_range) -1) USING INTEGER) >= :low_price AND CONVERT(SUBSTRING(price_range, 1, LOCATE(';',price_range) -1) USING INTEGER) <= :low_price) OR (CONVERT(SUBSTRING(price_range, LOCATE(';',price_range) + 1) USING INTEGER) >= :high_price AND CONVERT(SUBSTRING(price_range, LOCATE(';',price_range) + 1) USING INTEGER) <= :high_price)", {:low_price => 100, :high_price => 200}])
答案 1 :(得分:0)
首先,我建议拆分db列或更改列类型(范围!如果使用postgresql)
没有rails样式查询。您必须使用DB QUERY IN where子句。
像(PostgreSQL的),
Lodging.where("cast(regexp_split_to_array(price_range, ';')[0] as int) > 100").where("cast(regexp_split_to_array(price_range, ';')[1] as int) < 200")