Autor Zpráva
alibagil
Profil
Zdravím, potřeboval bych poradit.

Snažím se rozchodit našeptávání pomocí autocomplete a dotazů do DB, kde mám uložené adresy, ale nedaří se mi správně formulovat dotaz.

Momentálně mám: SELECT * FROM adresy WHERE ulice LIKE '%".$term."%'

Toto samozřejmě docela funguje a dělá to přibližně to, co očekávám, ale není to dokonalé. Na dotaz "Nádražní" to najde všechny ulice s tímto jménem, po mezeře a zadání čísla popisného dále omezí výber, nicméně už nic nenabízí když zapomenu mezeru, nebo když místo čísla popisného do dotazu zkusím číslo orientační, atd. Chěl bych, aby např. adresu "Nádražní 825/50" to nabídlo, ať uživatel zadá "Nádražní825", "Nádražní 50", "Nádr 825" atd. Je nějaký způsob, jak toho dosáhnout?
Tomášeek
Profil
alibagil:
Like umožňuje hledat podretezce, nekoriguje mezery, preklepy, apod. Samozřejmě.

Hledej fulltextové vyhledávání.

Jinak “Nádr 825” samozřejmě s polem “Nádražní 825/50” nemá nic společného. To, ze ta adresa není naseptana, je zcela v pořádku.
alibagil
Profil
Díky za odpověď. Třeba na: zrychlujemecesko.cz/mapa-pokryti jim funguje přesně to, co bych chtěl i já, tedy na dotaz "Nádr 825" nabídne stejnou adresu, jako na "Nádražní 825". Jde mi prostě o to, aby uživatel nebyl nucen vypsat celou svou adresu, ale aby dotaz stačilo omezit částí jména ulice, kdy mu vyjedou již přibližně správné výsledky, které jen upřesní např. číslem popisným, resp. orientačním.
Kajman
Profil
Pokud v $term nahradíte před hledáním mezery za procenta, tak to kromě verze se zapomenutou mezerou najde. Nezapomeňte tu proměnnou i escapovat pro použití v dotaze.

Pro zapomenutou mezeru už to bude složitější, možná hledat v ulici, kde se odstraní všechny mezery. Možná budete chtít hledat i bez diakritiky. To by se pak hodil sloupec, kde to bude vše už odstraněné. Like bude pomalý, ale pokud to není moc požadavků a moc záznamů, bude to třeba stačit.
Tomášeek
Profil
alibagil:
Třeba na: zrychlujemecesko.cz/mapa-pokryti jim funguje přesně to, co bych chtěl i já, tedy na dotaz "Nádr 825" nabídne stejnou adresu, jako na "Nádražní 825".
Ano, ale to se samozřejmě nebavíme o LIKE. Možností je více, záleží, jak moc chytré to má být. S tím samozřejmě pak roste i náročnost, nic jako „najdi mi adresu i bez mezer, i jen s částí ulice, bez diakritiky a možná si i kus domysli“ v MySQL defaultně neexistuje.
alibagil
Profil
Kajman:
Pokud v $term nahradíte před hledáním mezery za procenta, tak to kromě verze se zapomenutou mezerou najde. Nezapomeňte tu proměnnou i escapovat pro použití v dotaze.

To je to, co jsem potřeboval. Bez mezery to nenajde, ale pro část jména ulice plus číslo popisné, nebo orientační je to úplně perfektní, stačí mi to takto. Díky moc!

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:

0