Выберите оператор с несколькими полями «где», используя одно и то же значение без дублирования текста - PullRequest
1 голос
/ 11 марта 2010

Я начну с того, что не думаю, что то, что я хочу, можно сделать, но, тем не менее, я надеюсь, что я неправ, и кто-то знает больше меня. Так что вот ваш шанс ... Докажите, что вы умнее меня:)

Я хочу выполнить поиск в таблице SQLite для поиска любых записей, которые «похожи», без необходимости выписывать запрос в длинную руку.

Чтобы уточнить, как я знаю, я могу написать запрос:

select * from Articles where title like '%Bla%' or category like '%Bla%' or post like '%Bla%'

Это работает и не так уж и много, если вы проверяете только по нескольким столбцам, но если вам нужно проверять по пачке, тогда ваш запрос может быть очень длинным и неприятно выглядеть очень быстро, не говоря уже о возможности опечаток. (то есть: «Bla%» вместо «% Bla%»)

Что мне интересно, есть ли короткий способ сделать это?

* Этот следующий код работает не так, как я хочу, а просто показывает то, что я ищу

select * from Articles where title or category or post like '%Bla%'

Кто-нибудь знает, есть ли способ указать, что несколько столбцов 'где' должны использовать одно и то же значение поиска, не перечисляя одно и то же значение поиска для каждого столбца?

Заранее спасибо!

Ответы [ 3 ]

4 голосов
/ 11 марта 2010

Я думаю, учитывая, что вы используете sqlite, вы должны рассмотреть возможность использования полнотекстового поиска. Это сделает то, что вы пытаетесь сделать, более эффективным.

http://www.sqlite.org/cvstrac/wiki?p=FtsUsage

0 голосов
/ 11 марта 2010

Может быть, вы хотите объединить свои поля в одну строку, а затем КАК против этого?

select * from Articles where (title || ';' || category || ';' || post) like '%Bla%'

Точки с запятой между ними произвольны и предназначены для того, чтобы «ROB» и «копье» не возвращали ложный положительный результат.

Если вы не хотите предоставлять поля вообще, это более сложный вопрос ...

0 голосов
/ 11 марта 2010

Самое быстрое, что я могу придумать, это объединить заголовок, категорию и сообщение и посмотреть, соответствует ли объединенная строка "% Bla%". Чтобы это работало надежно, используйте разделитель, такой как ',' при конкатенации (иначе у вас могут быть заголовок 'Bl' и cagegory 'a').

Из головы не знаю, как называется оператор конкатенации в SQL, и я не уверен, существует ли он в универсальном SQL или SQLite.

Моя идея такова, что это может выглядеть примерно так:

select * from Articles where concat(title, ',', category, ',', post) like '%Bla%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...