Создание расширенного поискового запроса с помощью PHP Mysqli - PullRequest
0 голосов
/ 30 мая 2018

Я начал разработку проекта, и мне нужно использовать расширенный поисковый запрос с PHP и Mysqli , но у меня возникают некоторые проблемы.Проверьте ниже мой запрос.

$query = "SELECT id, name, keybox, posterid, alias, xmdb from `datasys` WHERE name LIKE '%".$filter."%' OR keybox LIKE '%".$filter."%' ORDER BY id LIMIT 0, 10";

Это отлично работает!Но все равно не совпадают записи, содержащие символы, например, если в моей базе данных есть строка с именем "Цвет: красный" и кто-то наберет "Цвет красный" , запрос вернется пустым,но если я наберу "Цвет: красный", возвращается найден.Итак, что я должен сделать, чтобы решить эту проблему?

Спасибо

Ответы [ 3 ]

0 голосов
/ 30 мая 2018

Либо используйте REGEXP как: -

SELECT * FROM table WHERE columnName REGEXP "regular_expression";

, либо используйте функцию REPLACE () в предложении WHERE как: -

SELECT * FROM table WHERE REPLACE(columnName, ":", "") LIKE "like_expression";
0 голосов
/ 30 мая 2018

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

 <?php
//Fetches Exact Data
    $query = "SELECT id, name, keybox, posterid, alias, xmdb from `datasys` WHERE name LIKE '%".$filter."%' OR keybox LIKE '%".$filter."%' ORDER BY id LIMIT 0, 10";

    //If the previous query doesn't return any value, then use
    //Split the the user input and then query DB
    $condition="name!=''";
    $filters=explode(" ",$filter);
    foreach($filters as $val)
    {
        $condition.=" or (name LIKE '%$val%' OR keybox LIKE '%$val%')";
    }
//Fetches Similar Data
    $query = "SELECT id, name, keybox, posterid, alias, xmdb from `datasys` WHERE $condition ORDER BY id LIMIT 0, 10";

    //-----------ENDS
    ?>
0 голосов
/ 30 мая 2018

Единственное, о чем я могу подумать, чтобы поддерживать согласованность, - это то, что вы можете исключить «:» в своем запросе на совпадение.Попробуйте следующий запрос:

$query = "SELECT id, name, keybox, posterid, alias, xmdb from `datasys` WHERE REPLACE(name, ':', '') LIKE '%REPLACE(".$filter.", ':', '')%' OR REPLACE(keybox, ':', '') LIKE '%REPLACE(".$filter.", ':', '')%' ORDER BY id LIMIT 0, 10";

Надеюсь, это поможет.

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