Bien que ça soit deux technologies complètements différentes, PHP & MySQL cohabitent surtout pour l’apprentissage comme s’il était qu’un. Si vous apprenez le langage PHP & le SGBD MySQL, vous vous posez peut être la question de savoir comment faire ou mettre un moteur ou de recherche dans son site avec ce deux technologies…

Et bien ça tombe bien, découvrons ensemble comment programmer un moteur de recherche très mais alors très basique sur son site et afin je vous donnerai des pistes pour faire un moteur de recherche avancé.

Barre de recherche en PHP & MySQL

Devinez que vous ayez une table « article » qui a une structure suivante :

  • Id : la clé primaire en integer(11)
  • titre : varchar(255)
  • contenu : text
  • date_creation : datetime

Et vous voulez mettre qu’une personne puisse avoir la possibilité de rechercher un article sur base de son titre. Par exemple : taper « piment » pour retrouver les articles avec comme titre : « les piments rouges sont dangereux », « pourquoi je n’aime pas le piment », etc.

Pour aboutir à un tel résultat, tout peut se jouer dans la requête sql de la récupération de vos articles. Pour récupérer un article, on peut faire :

$req = $db->query('SELECT * FROM article');

Il y a aussi possibilité d’utiliser la clause WHERE

$req = $db->query("SELECT * FROM article WHERE date_creation >= '2017-05-19'");

Ce qui veut dire qu’on récupère tous les articles dont la date est égale ou au-delà du 19 mai 2017.

De la même manière qu’on peut dire :

$req = $db->query("SELECT * FROM article WHERE titre = 'piment'");

Ce qui veut dire qu’on récupère tous les articles où le titre est égal à « piment »

Ceci est vraiment trop précis mais on aimerait dire un truc du genre : « récupère tous les articles où le titre contient piment. »

Pour cela, il faut utiliser LIKE. LIKE se traduit en français par « comme ».

$req = $db->query("SELECT * FROM article WHERE titre LIKE 'piment'");

Ce qui veut dire qu’on récupère tous les articles où le titre est comme « piment ».

En se servant du signe %, qui est un « joker », on peut dire à peu près ce qu’on veut

$req = $db->query("SELECT * FROM article WHERE titre LIKE 'piment%'");

Ce qui veut dire qu’on récupère tous les articles où le titre commence par « piment ».

$req = $db->query("SELECT * FROM article WHERE titre LIKE '%piment'");

Récupère tous les articles où le titre termine par « piment »

$req = $db->query("SELECT * FROM article WHERE titre LIKE '%piment%'");

Récupère tous les articles où le titre contient « piment »

Pour exemple, vous retrouvez un blog minimal que j’ai fait pour vous donner l’idée de comment se servir de ce clause MySQL et un peu de PHP, pour au final avoir une barre de recherche.

Barre de recherche php

Allez plus loin…

C’est qu’on a fait ci-dessus, est ce qu’on appelle une recherche par un mot clé. C’est-à-dire, l’utilisateur ferra la recherche que par un seul mot clé. Même s’il tapait une phrase comme « Programme de tchat », cela sera considéré comme un seul mot clé, donc, les résultats qui seront retournés sont ceux qui contiennent le mot clé « programme de tchat ».

Avec MySQL, il serait mieux d’explorer les recherches sur les index FULLTEXT pour faire des recherches un peu plus avancées. Les recherches sur plusieurs mots clés… en tapant par exemple « programme de tchat », ceci sera découpé en mot « par espace », et chaque mot sera cherché indépendamment. Ce qui ferra que programmetchat seront recherchés individuellement et l’ensemble de résultat produit pour ce deux requêtes seront renvoyés comme résultat. Cliquez ici plus d’informations sur le sujet.

Catégorisé: