Bonjour,
Je cherche a retrouver, a partir d'un string, une valeur en base de donnée.
jusque là, rien de special.
Là ou ca se complique, c'est qu'en realitée la valeur en base de donnée doit pouvoir posseder des wilCards.
je m'explique :
la table :
la requete :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 CREATE TABLE `route` ( `route` varchar(150) NOT NULL, `module` varchar(100) default NULL, `controler` varchar(100) default NULL, `action` varchar(100) default NULL, `lang` varchar(2) default NULL, PRIMARY KEY (`route`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1
le resultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part select route, module, controler, `action` from zf_route where 'foo.bar' like route
Bonne nouvelle : ca marche!route module controler action lang
------ ------ --------- ------ ------
foo.% (NULL) index index fr
mauvaise nouvelle : ca n'utilise pas les index :
Code : Sélectionner tout - Visualiser dans une fenêtre à part explain select * from route where 'foo.bar' like route;Donc, ma question est : avez vous une idée d'une facon de faire propre (utiliser un like de facon inversée me semble aberrant, mais, j'ai aps d'autre idée) et / ou de comment faire en sorte que des index soient utilisés.id select_type table type possible_keys key key_len ref rows Extra
------ ----------- ------ ------ ------------- ------ ------- ------ ------ -----------
1 SIMPLE route ALL (NULL) (NULL) (NULL) (NULL) 1 Using where
J'ai essayé aussi en mettant un index full text sur la colonne incriminée, sans succes.
.
Partager