Filtrer une requête avec une regexp
Bonjour,
Je dispose d'une BD MySQL de la forme suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
mysql> show tables;
+-------------------+
| Tables_in_video67 |
+-------------------+
| ABONNES |
| ACTEURS |
| CASSETTES |
| EMPRES |
| FILMS |
+-------------------+
mysql> describe FILMS;
+-------------+--------------------------------------------------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------------------------------------------------------------------+------+-----+---------+-------+
| NoFilm | smallint(6) | NO | PRI | | |
| Titre | varchar(80) | NO | | | |
| Nationalite | varchar(30) | YES | | NULL | |
| Realisateur | varchar(40) | YES | | NULL | |
| Couleur | enum('Couleurs','Noir et Blanc') | NO | | | |
| Annee | year(4) | YES | | NULL | |
| Genre | enum('Comédie','Comédie dramatique','Drame','Aventure','Documentaire') | YES | | NULL | |
| Duree | smallint(6) | YES | | NULL | |
| Synopsis | varchar(255) | YES | | NULL | |
+-------------+--------------------------------------------------------------------------+------+-----+---------+-------+ |
Mon objectif est de récupérer le titre depuis un formulaire HTML. Si ce titre est different de la chaîne vide, alors je recherche un film par son titre. Cependant, je veux que l'utilisateur puisse simplement entrer une partie du titre, et non le titre entier. Par conséquent, il faut que je puisse appliquer une expression régulière. Celle-ci peux se situer à deux endroits différents :
- Dans la requête SQL elle même
- En filtrant le résultat de la requête
Si j'essai d'appliquer une regex a ma requête SQL, ca ne fonctionne pas :
Code:
1 2
| mysql> select Titre from FILMS WHERE TRUE REGEXP '.*ciel.*';
Empty set (0.00 sec) |
Il y a un film dont le titre est 'Le ciel est à vous' dans la table FILMS.
L'autre option, c'est de récupérer tout les titre de film à l'aide d'un mysql_query, appliquer ma regex sur chacun de ces titres et ne conserver que les bon élément dans mon $result:
Exemple :
Code:
1 2 3 4 5
| $result = mysql_query("SELECT Titre FROM FILMS", $idcom);
$ligne = mysql_fetch_array($result)
foreach($ligne as $titre) {
// j'applique la regex
} |
Là je bloque un peu pour appliquer la regex, et je pense qu'il est plus propre de l'appliquer directement dans la requête, non?
Merci de m'éclairer ;)
Kal