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
Kde hledám 'name' podobný 'Designové křeslo KUBIK'. Nejsem si jistý, jestli část ORDER BY může takto fungovat. Je to myšleno jako: Vezmi počet výrazů 'Designové', sečti s počtem výrazů 'křeslo', 'KUBIK' a podle tohoto výsledku těchto tří čísel to seřaď.

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
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í.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: