MySQL фильтр запросов, как не работает должным образом - PullRequest
0 голосов
/ 03 октября 2019

У меня есть столбец campaign_name, и пользователь может напечатать и найти ключевое слово для увеличения чувствительной строки. Например, они ввели "adopt a patient". Но внутри моего стола campaign_name: у меня есть "adopt-a-patient"

+----------------
|campaign_name  |
+----------------
|adopt-a-patient|
-----------------
select * from campaign where campaign_name LIKE '%adopt a patient%';
return ZERO result

Мой campaign_name порядок сортировки уже установлен на utf8_general_ci. Но если пользователи ввели именно слово "adopt-a-patient", результат вернется, как и ожидалось.

Любая помощь будет принята с благодарностью. В любом случае, я реализую это в приложении django. Я просто отлаживаю его внутри HeidiSQL.

Ответы [ 3 ]

1 голос
/ 03 октября 2019

Возможно, замена пробелов на '%' будет делать то, что вы хотите:

where campaign_name like concat('%', replace('ADOPT A PATIENT', ' ', '%'), '%')

Примечание. Это допускает строки любой длины. Если вы хотите разрешить только один символ, вместо этого используйте '_':

where campaign_name like concat('%', replace('ADOPT A PATIENT', ' ', '_'), '%')
0 голосов
/ 03 октября 2019

У вас есть три слова в фильтре поиска: "ADOPT", "A", "CAMPAIGN". Возможно, вы захотите сделать одно из этих двух действий:

1) найти все строки, соответствующие хотя бы одному слову

SELECT * FROM campaign 
WHERE (campaign_name LIKE '%adopt%') OR (campaign_name LIKE '%a%')
OR (campaign_name LIKE '%patient%);

(лучше рассмотреть только слова длиннее 2 символов)

2) искать все строки, соответствующие всем трем словам:

SELECT * FROM campaign 
WHERE (campaign_name LIKE '%adopt%') AND (campaign_name LIKE '%a%')
AND (campaign_name LIKE '%patient%);

, если вы хотите, чтобы искомые слова были в любом порядке
или

SELECT * FROM campaign WHERE (campaign_name LIKE '%adopt%a%campaigne%');

если вы хотите, чтобы искомые слова были в том порядке, в котором они были написаны.

0 голосов
/ 03 октября 2019

Используйте % между, чтобы получить идеальный результат

select * from campaign where campaign_name LIKE '%adopt%a%patient%';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...