[英]search by spliting the content of attributes in model -rails
我有一個模型Lodging
,其屬性為price_range
該屬性包含以下格式的數據: 89;149
(字符串格式),說這是介於89到149之間的價格范圍,我現在要搜索價格范圍在100-200
之間的那些lodgings
想要通過單行查詢Lodging.where(...
例如Lodging.where(...
)來完成此操作,有什么方法可以解決我的查詢?
謝謝!
對不起,但這是一個不好的數據庫設計。 我建議將您的實現遷移為使用兩個數據庫字段(可能是: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}])
首先,我建議拆分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")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.