Petit exemple, à mon avis bien plus compréhensible...
Table
------------
pattern
label
pattern | label
---------------------
ab | commence par ab
abcd | commence par abcd
xyz | commence par xyz
Il faudrait pouvoir retrouver la ligne grâce à une chaine de caractères, un peu de cette façon ci :
"SELECT * FROM Table WHERE 'chaine' LIKE pattern%"
Bref, faire une recherche sur la version abrégée du motif de recherche. Si je peux avoir la chaine la plus représentative ("abcd" plutôt que "ab" pour "abcdef") en plus .. c'est un plus !
Mais déjà est-ce possible ?
# Trouvé
Posté par Elfir3 . Évalué à 1.
SELECT * FROM `Table` WHERE "abcdef" LIKE CONCAT(pattern,'%')
Me reste plus qu'à trouver comment trouver la plus longue ..
[^] # Re: Trouvé
Posté par Elfir3 . Évalué à 1.
SELECT * FROM societes
WHERE 'BASFERG' LIKE CONCAT(nom,'%')
AND CHAR_LENGTH(nom) =
(
SELECT MAX(CHAR_LENGTH(nom))
FROM societes
WHERE 'BASFERG' LIKE CONCAT(nom,'%')
)
Je me trompe sans doute, mais la solution semble être assez gourmande, n'y a-t-il pas plus simple pour le SGBD?
[^] # Re: Trouvé
Posté par KiKouN . Évalué à 2.
[^] # Re: Trouvé
Posté par Elfir3 . Évalué à 1.
# pattern matching sans wildcards
Posté par fcartegnie . Évalué à 2.
(
( LEFT(foo,1) = "a" )
+
( 2 * LEFT(foo,2) = "ab" )
+
( 4 * LEFT(foo,3) = "abc" )
+
( 8 * LEFT(foo,4) = "abcd" )
+
...
) AS rank
ORDER by rank
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.