Autor Zpráva
peteo
Profil
Dobrý deň, večer, ráno,

potreboval by som, prosím, poradiť.
Chcem z databázy vyselektovať podľa podla stĺpca meno z tabuľka meno všetky slová začínajúce písmenom $book, na čo mám funkciu

$kolko_zaznamov=mysql_query("SELECT COUNT(*) FROM meno WHERE LCASE(meno) LIKE '".$book."%'");

funguje to, to je v poriadku, pokiaľ mám napr $book="j", alebo i čokoľvek iné.
Ale ak je napr $book="a", tak potrebujem, aby boli vyhľadané i slová, ktoré začínajú na á, ä, ă, â, å, à a pod. u iných najmä spoluhlások.
Vie mi niekto poradiť?
Napadlo ma iba

$kolko_zaznamov=mysql_query("SELECT COUNT(*) FROM meno WHERE LCASE(meno) LIKE '".$book[0]."%' OR LIKE '".$book[1]."%'");  //atď.

kde do poľa $book[] budem musieť jednotlivé znaky uložiť.
alebo je nejaké efektnejšie riešenie?
Tori
Profil
peteo:
Ale ak je napr $book="a", tak potrebujem, aby boli vyhľadané i slová, ktoré začínajú na á, ä, ă, â, å, à a pod. u iných najmä spoluhlások.
1. Tohle ovlivňuje porovnávání ("collation"), které pro ten sloupec nastavené. Koukněte se na rozdíly mezi utf8_unicode_ci, utf8_general_ci a utf8_czech_ci. První dvě se liší hlavně pořadím znaků typu Đ,Ø,Æ, české rozlišuje Ch.

2. Pokud budete tímto způsobem vyhledávat často, je vhodnější přidat do tabulky sloupeček typu CHAR(2), kde bude ten první znak (nebo dva pro Ch) ze jména. Potom budete normálně hledat shodu, bez LIKE: WHERE iniciala = '$znak'.
Joker
Profil
peteo:
Pokud používáte kódování UTF-8, mělo by to být výchozí chování.
Tuším, že case-insensitive porovnávání se takhle chová (například utf8_czech_ci). Pokud by se naopak měl na diakritiku brát ohled (tj. „á“ je něco jiného než „a“), mělo by to zařídit porovnávání _bin (utf8_czech_bin)
tiso
Profil
peteo: v mojom návrhu by to šlo jednoduchšie.
peteo
Profil
Tori:
aha, dobrý nápad.
teda vytvoriť ďalší stĺpec s odstránenou diakritikou.

Joker
mám kódovanie utf8_bin.
ja práve potrebujem, aby pri hľadaní sa nerozlišovali znaky „á“ a „a“, ale pri triedené (výstupe), už áno.
Chápem, že teraz sa to správa normálne (čo je dobre), otázka stojí, ako to obísť.


tiso:
jasne, aj to je riešenie.
Ďakujem za pripomenutie.
Vždy ma zaskočí jeden problémik a motám sa ako maďar v kukurici.

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: