gpt4 book ai didi

mysql - 'where' 方法内部的正则表达式

转载 作者:行者123 更新时间:2023-11-29 06:44:06 25 4
gpt4 key购买 nike

我需要一种方法来遍历数据库并返回适当的结果。在本例中,它按作者、标题、出版日期或 ISBN 代码搜索书籍。我决定使用 where() 方法,但我遇到了两个问题:

1) 我无法通过多个字段进行搜索。很容易找到标题:

def self.browse(query)
if query.nil?
nil
else
self.where("title REGEXP :query", query: query)
end
end

但我不知道如何设置它来查找标题或作者或 isbn 等。尝试过

self.where("(title OR author OR publishing_date OR isbn) REGEXP :query", query: query)

但是没用

其次,我希望我的查询只匹配单词的开头或结尾。在 mysql Workbench 中它很容易,但我很难在 Rails 中做到这一点。这是我迄今为止尝试过的(但失败了):

self.where("title REGEXP :query", query: /^(query)*$/)

self.where("title REGEXP /^:query/", query: query)

self.where("title REGEXP :query", query: $"query"^)

不用说,在互联网上我找到了很多不同的文档或教程,一个说“^”应该在最后,另一个应该在开头......

最佳答案

1) 您需要在 where sql 中使用括号以及 AND 和 OR 子句:

(title IS NOT NULL AND title REGEXP :id_query) OR (name IS NOT NULL AND name REGEXP :name_query)

2) 您需要像这样同时使用 ^(行首)和 $(行尾)。

(^something|something$)

这是我与自己的代码进行匹配的整个示例。将 id 和 name 替换为您自己的列,并在其中放置额外的 OR 以匹配更多列

Charity.where("(id IS NOT NULL AND id REGEXP :id_query) OR (name IS NOT NULL AND name REGEXP :name_query)", id_query:'1', name_query:'(^a|a$)')

Here is the to_sql output of the above:

Charity.where("(id IS NOT NULL AND id REGEXP :id_query) OR (name IS NOT NULL AND name REGEXP :name_query)", id_query:'1', name_query:'(^a|a$)').to_sql
=> "SELECT `charities`.* FROM `charities` WHERE ((id IS NOT NULL AND id REGEXP '1') OR (name IS NOT NULL AND name REGEXP '(^a|a$)'))"

关于mysql - 'where' 方法内部的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19728977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com