Условие запроса SQL Server на основе входных параметров - PullRequest
0 голосов
/ 04 ноября 2018

Мне нужна помощь в написании логики для запроса к серверу SQL. У меня есть таблица Xyz с тремя столбцами

enter image description here

Я должен найти все сущности, основанные на пользовательском вводе json.
Логика идет так.

  1. Если пользовательский массив ввода равен {"button"}, запрос будет «Выберите * из XYZ, где значение равно«% button% »;»

  2. Если пользовательский ввод {"кнопка", "текст"}, запрос будет: "Выберите * из XYZ, где значение равно"% button% "ИЛИ значение как"% text% ";"

  3. Если пользовательский ввод {"кнопка", "текст", "страница"}, запрос будет: «Выберите * из XYZ, где (значение, например,«% button% »ИЛИ, например,«% text% ») И (значение, например«% button% », ИЛИ, например,«% page% ») И (значение, например,«% page% » Значение ИЛИ как "% text%") И (значение как "% button%" ИЛИ Значение как "% text%" ИЛИ значение как "% page%"); "

  4. Если пользовательский ввод {"кнопка", "текст", "страница", "элемент"}, запрос будет: "Выберите * из XYZ, где (значение, например,"% button% ", ИЛИ, например,"% text% ", ИЛИ, например,"% page% ") И (значение, например,"% button% ", ИЛИ, например,"% page% ", ИЛИ. как "% element%") И (значение как "% text%" ИЛИ как "% page%" ИЛИ как "% элемент%") И (значение как "% button%" ИЛИ как "% text%" Значение ИЛИ как "% element%") И (значение как "% button%" ИЛИ значение как "% text%" ИЛИ значение как "% элемент%" ИЛИ значение как "% элемент%);"

  5. Если пользовательский ввод {"button", "text", "page", "element", "add"}, логика запроса должна содержать набор из 4 элементов в условии и.

Так что логика в том, что я могу получать любые виды пользовательского ввода, которые могут содержать "n" элементов. Для этих n элементов мне нужно добавить n-1 и условие, как указано выше, и вернуть результат пользователю. Как я могу написать логику для создания такого запроса? Любые предложения будут полезны.

1 Ответ

0 голосов
/ 04 ноября 2018

Если пользовательский ввод {"кнопка", "текст", "страница", "элемент"}

Попробуйте следующее:

SELECT * FROM XYZ 
WHERE ((value like '%button%') + 
       (value like '%text%') + 
       (value like '%page%') + 
       (value like '%element%')) >= 3

Основная суть здесь в том, что Like %..% является функцией сравнения, и она возвращает 0 или 1, в зависимости от соответствия.

Из вашего описания проблемы кажется, что может быть найдена любая комбинация n-1 слов, или , все n слов могут быть найдены.

Итак, 3 или более входных ключевых слова должны быть найдены в value. Таким образом, сумма всех этих условий сравнения должна составлять по крайней мере 3. Это должно учитывать все возможные комбинации .

Итак, для n количества входов, вы сделаете что-то вроде следующего:

SELECT * FROM XYZ 
WHERE ((value like '%value_1%') + 
       (value like '%value_2%') + 
       ....
       (value like '%value_n-1%') + 
       (value like '%value_n%')) >= n-1

Для n = 1 это будет особый случай, и вы просто сделаете следующее:

SELECT * FROM XYZ 
WHERE value LIKE '%value_1%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...