Поиск SQL не может вернуть результат, если одно слово правильно, а другое неправильно - PullRequest
0 голосов
/ 14 марта 2019

На моем веб-сайте есть окно поиска, в котором пользователь вводит и ищет это слово независимо от того, находится оно в базе данных mySQL или нет.

Мой код:

$search_text = $_POST['srch-text'];

$sql = "SELECT * FROM search WHERE content LIKE '%$search_text%';";

$result = mysqli_query($dbcon, $sql);
$number_of_results = $result->num_rows;

Работает нормально, если кто-то вводит два слова, которые существуют в базе данных. Предположим, что кто-то дает ввод "ABCD XYZ". Здесь ABCD существует в базе данных, но XYZ не существует в базе данных. Тогда это не возвращает никакого результата. Я хочу показать результат слова ABCD.

Ответы [ 3 ]

0 голосов
/ 14 марта 2019

Хотя вы можете использовать регулярные выражения, я бы использовал функцию php's explode для создания массива, а затем либо выполнял несколько SQL-запросов, либо implode с % как«клей».

0 голосов
/ 14 марта 2019

Вы можете разбить вашу строку на две строки с пробелом '' в качестве разделителя Вот SQL-скрипт, который вы легко конвертируете в mysql

declare @s as varchar(100)
declare @s1 as varchar(100)
declare @s2 as varchar(100)

set @s='STRING1 STRING2'
declare @n as int
set @n=charindex(' ',@s)
if @n>0 
begin
set @s1=substring(@s,1,@n-1)
set @s2=substring(@s,@n+1,len(@s))
end

select @s1 [mystring1],@s2[mystring2]

Затем замените ваш запрос вместо

$sql = "SELECT * FROM search WHERE content LIKE '%$search_text%';";

от

$sql = "SELECT * FROM search WHERE content LIKE '%'+@string1+'%' or content LIKE '%'+@string1+'%'

Вот эквивалентный скрипт mysql

set @s='STRING1 STRING2';

set @n=LOCATE(' ',@s,1);

set @s1=substring(@s,1,@n-1);
set @s2=substring(@s,@n+1,LENGTH(@s));


select @s1 "mystring1",@s2"mystring2";
0 голосов
/ 14 марта 2019

Вы можете использовать регулярные выражения. Если вы используете пробелы для разделения слов, вам необходимо заменить их на |:

SELECT *
FROM search
WHERE content REGEXP REPLACE(?, ' ', '|');

Вы также должны передавать строку с использованием параметров, а не смешивать строку запроса с пользовательским вводом. Вот почему этот пример использует ? в качестве заполнителя для параметра.

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