簡體   English   中英

通過在model -rails中拆分屬性的內容進行搜索

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM