Android Java SQLite поиск / соответствие вопрос - PullRequest
1 голос
/ 24 июня 2011

Итак, я пытаюсь найти столбец, в котором строка представляет собой список слов, разделенных запятыми, без пробелов, таких как один, два, три, четыре и т. Д. Проблема, с которой я сталкиваюсь, заключается в том, что я пытаюсь найти точное слово в строке. На данный момент я просто использую% word%, чтобы найти совпадение, которое, конечно, работает, но проблема заключается не в том, что если бы я искал «word», он также соответствовал бы «words», «worded» и т. Д. на. Итак, вопрос в том, как я могу найти и получить точное слово?

Ответы [ 3 ]

1 голос
/ 24 июня 2011

Здесь проблема дизайна. Структура базы данных не соответствует тому, чего вы пытаетесь достичь. Хранить несколько значений в столбце и пытаться сопоставить отдельные значения можно с другой базой данных, такой как MySQL (с типом SET), но это не на SQLite. Таким образом, вы можете попробовать все виды странного решения для сопоставления строк, но оно не будет чистым, и вы не сможете воспользоваться преимуществами оптимизации SQLite. Это повлияет на производительность.

Вместо этого вы можете использовать отдельную таблицу words, которая содержит уникальную запись для каждого слова и другую таблицу foobar_words, чтобы установить отношение многие ко многим между словами и вашей основной таблицей foobar. Тогда вы можете точно подобрать отдельные слова, используя соединение. И если есть проблемы с производительностью, с этой схемой вы сможете оптимизировать с помощью индексов.

1 голос
/ 24 июня 2011

Добавьте и добавьте запятую к строковому значению в столбце, а затем найдите в нем свой термин, который также имеет запятую с каждой стороны от него:

   one,two,three,twofold 

становится

  ,one,two,three,twofold,

и вы ищете

   %,two,%


 where ',' + mycolumn + ',' like '%,two,%'

edit: in SQLite replace '+' with '||' (pipe pipe): where ',' || mycolumn || ',' like  '%,two,%'

Вам не нужно изменять («подделывать») саму запись базы данных.

PS Подстановочный знак с обеих сторон поискового термина исключает возможность использованияиндекс для ускорения поиска, поэтому такой подход не рекомендуется для больших наборов данных.Но, опять же, это не список, разделенный запятыми: -)

PPS Я, конечно, не знаю, какое устройство вы используете, или размер вашего стола, но на ПК уже несколько летSQlite 8 мс требуется для поиска среди 3000 записей, используя этот подход с запятой.

0 голосов
/ 24 июня 2011

Если вы не хотите связываться со строкой, вы можете изменить свой sql так, чтобы вы смотрели where mycolumn like 'word,%' or mycolumn like '%,word,%' or mycolumn like '%,word'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...