使用 Rails + Postgres hstore 查询多个键值
Query multiple key values with Rails + Postgres hstore
我正在尝试进行查询以在我的 hstore 列属性中搜索值。我正在按属性按用户输入过滤问题。可以搜索电子邮件为 X 的问题,或电子邮件为 X 且发件人为 "someone" 的问题。很快我需要更改为使用 LIKE 搜索类似的结果。因此,如果您也知道如何使用 LIKE 来做到这一点,请显示这两个选项。
如果我这样做:
Issue.where("properties @> ('email => pugozufil@yahoo.com') AND properties @> ('email => pugozufil@yahoo.com')")
它 returns 是个问题。
如果我这样做:
Issue.where("properties @> ('email => pugozufil@yahoo.com') AND properties @> ('sender => someone')")
这里我得到一个错误,告诉我:
ERROR: Syntax error near 'd' at position 11
我将“@>”更改为“->”,现在显示此错误:
PG::DatatypeMismatch: ERROR: argument of AND must be type boolean, not type text
我需要知道如何查询具有多个 key/value 对的属性,使用 "OR" 或 "AND" 并不重要。
我希望得到一个或多个包含我正在寻找的值的结果。
我最终会这样做。使用 where 方法的 array 选项。还在评论中使用@anusha 的建议。 IDK 为什么投反对票,我找不到任何关于如何做这样简单的事情的信息。我对格式化我的查询有疑问,主要是使用 hstore。所以我希望它能像现在对我一样对未来的人有所帮助。
if params[:filter].present?
filters = params[:filter]
conditions = ["properties -> "]
query_values = []
filter_query = ""
filters.each do |k, v|
if filters[k].present?
filter_query += "'#{k}' LIKE ?"
filter_query += " OR "
query_values << "%#{v}%"
end
end
filter_query = filter_query[0...-(" OR ".size)] # remove the last ' OR '
conditions[0] += filter_query
conditions = conditions + query_values
@issues = @issues.where(conditions)
end
我正在尝试进行查询以在我的 hstore 列属性中搜索值。我正在按属性按用户输入过滤问题。可以搜索电子邮件为 X 的问题,或电子邮件为 X 且发件人为 "someone" 的问题。很快我需要更改为使用 LIKE 搜索类似的结果。因此,如果您也知道如何使用 LIKE 来做到这一点,请显示这两个选项。
如果我这样做:
Issue.where("properties @> ('email => pugozufil@yahoo.com') AND properties @> ('email => pugozufil@yahoo.com')")
它 returns 是个问题。
如果我这样做:
Issue.where("properties @> ('email => pugozufil@yahoo.com') AND properties @> ('sender => someone')")
这里我得到一个错误,告诉我:
ERROR: Syntax error near 'd' at position 11
我将“@>”更改为“->”,现在显示此错误:
PG::DatatypeMismatch: ERROR: argument of AND must be type boolean, not type text
我需要知道如何查询具有多个 key/value 对的属性,使用 "OR" 或 "AND" 并不重要。
我希望得到一个或多个包含我正在寻找的值的结果。
我最终会这样做。使用 where 方法的 array 选项。还在评论中使用@anusha 的建议。 IDK 为什么投反对票,我找不到任何关于如何做这样简单的事情的信息。我对格式化我的查询有疑问,主要是使用 hstore。所以我希望它能像现在对我一样对未来的人有所帮助。
if params[:filter].present?
filters = params[:filter]
conditions = ["properties -> "]
query_values = []
filter_query = ""
filters.each do |k, v|
if filters[k].present?
filter_query += "'#{k}' LIKE ?"
filter_query += " OR "
query_values << "%#{v}%"
end
end
filter_query = filter_query[0...-(" OR ".size)] # remove the last ' OR '
conditions[0] += filter_query
conditions = conditions + query_values
@issues = @issues.where(conditions)
end