Autor | Zpráva | ||
---|---|---|---|
Martin02 Profil |
Ahoj,
dělal jsem na skriptu pro hledání podobných názvů z MySQL. Docela náhodou jsem narazil na funkci INSTR() , kterou jsem dříve neznal a pomocí ní jsem v PHP sestavil jakýsi generátor takovýchto SQL dotazů:
SELECT id_product FROM `ps_product_lang` WHERE `name` != 'Designové křeslo KUBIK' ORDER BY INSTR(`name`, 'Designové') + INSTR(`name`, 'křeslo') + INSTR(`name`, 'KUBIK') DESC LIMIT 0, 4 Ve většině případech to funguje dobře, ale někde prostě ne. Když si vyjedu výsledky tohoto dotazu (bez LIMITu), tak na prvním místě mám 'Kancelářské konferenční křeslo CHARM 811', kde je jen jedna shoda - 'křeslo', zatímco 'Dvojkřeslo KUBIK', kde jsou dvě shody - 'křeslo' a 'KUBIK', je až na pátém místě. Jakto? Díky za odpovědi |
||
Kajman Profil |
Funkce instr vrací místo, kde se řetězec nalézá, ne kolikrát. Zkuste to třeba vždy obalit funkcí least...
least(instr(`sloupec`,'hodnota'),1) Ale rychlé to nebude, zkuste se mrknout na fulltextové vyhledávání, to by mohlo být s indexem svižnější http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html |
||
Martin02 Profil |
#3 · Zasláno: 17. 8. 2014, 09:33:30
Kajman:
Děkuji moc. Funkce least funguje. O rychlost mi teď nejde, ale přesto dík za odkaz - v budoucnu bych to možná předělal na fulltextové vyhledávání. |
||
Časová prodleva: 11 let
|
0