Autor | Zpráva | ||
---|---|---|---|
peteo Profil |
#1 · Zasláno: 6. 2. 2013, 19:32:50
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 |
#2 · Zasláno: 6. 2. 2013, 19:43:50
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 |
#3 · Zasláno: 6. 2. 2013, 19:44:01
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 |
#4 · Zasláno: 6. 2. 2013, 19:56:07
peteo: v mojom návrhu by to šlo jednoduchšie.
|
||
peteo Profil |
#5 · Zasláno: 6. 2. 2013, 20:02:44 · Upravil/a: peteo
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. |
||
Časová prodleva: 12 let
|
0