2 votes

sql obtenir toutes les lignes où x contient chaque mot de la chaîne de caractères

Voici un exemple approximatif de mon code actuel. Pour des raisons de simplicité, je n'ai pas inclus les requêtes paramétrées :

if(isset($_GET["q"])) {
    $query = "%" . trim($_GET["q"]) . "%";
    $search = $pdo->query("
        SELECT * 
        FROM test 
        WHERE title LIKE {$query} AND keywords LIKE {$query}
    ");
    var_dump($search);
}

Tableau : test :

| title             | keywords       |
| this, is a "test" | this is a test |

J'ai essayé de créer un système de recherche simple sur mon site web en utilisant les éléments de base suivants SQL . La plupart du temps, j'ai obtenu des résultats positifs, mais j'ai rencontré un problème que je ne parviens pas à résoudre après plusieurs jours de recherche.

Si je tape quelque chose comme "this is a test" comme requête, j'obtiens une ligne retournée avec les résultats pertinents. Mais lorsque j'interroge "test this is a" il renvoie aucun résultat .

Et si la requête comporte des fautes de frappe, cela ne fonctionne pas non plus. (J'ai cherché dans le levenshtein, mais aucune réponse ne fonctionne au sein de MySQL ).

Toute aide est appréciée, A la vôtre.

4voto

Bilal Ahmed Points 3257

Vous devez d'abord alter table pour FULLTEXT

ALTER TABLE test ADD FULLTEXT(title);
ALTER TABLE test ADD FULLTEXT(keywords);

puis exécutez cette requête en utilisant MATCH

SELECT * FROM test WHERE MATCH(title) AGAINST ('test this is a' IN NATURAL LANGUAGE MODE)
 OR MATCH(keywords) AGAINST('test this is a' IN NATURAL LANGUAGE MODE);

J'ai joint la capture d'écran du résultat.

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X