Anonymous
28.01.2004, 10:52:03
Witam wszystkich
Mam prostą wyszukiwarke i takie zapytanie do bazy:
[php:1:e5d8cd73f5]<?php
$query = mysql_query("SELECT * FROM dane WHERE " . $_REQUEST['kryterium'] . " LIKE '%" . $_REQUEST['wartosc'] . "%' order by tytul LIMIT $p, $ile");
$numrows = "SELECT count(*) FROM dane WHERE " . $_REQUEST['kryterium'] . " LIKE '%" . $_REQUEST['wartosc'] . "%'";
list($liczba_wynikow) = @mysql_fetch_row(@mysql_query($numrows));
?>[/php:1:e5d8cd73f5]
Problem polega na tym że... rozpoznaje wielkość liter.
Mianowiecie jeżeli mam tytuł "Łzy słońca"
to wyszukiwarka znajdzie go, ale tylko jeżeli jako wartość wyszukiwania wpisze "Łzy słońca" a chce aby znajdował go również gdy wpisze pierwszą litere jako małą - "łzy słońca"
Jak to rozwiązać?? będe wdzięczny za każdą pomoc!
Koshin
28.01.2004, 12:17:54
mysql daje mozliwosc zamiany wielkosci liter w poszukiwanych wartosciach, za pomoca funkcji lower i upper, ale nie wiem jak one sobie poradza z polskimi literkami.
mozesz rowniez zmieniac wielkosc liter w tym co wprowadzi uzytkownik do wyszukiwania. ale to takze nie jest chyba debeściarskie rozwiazanie
FiDO
28.01.2004, 12:20:51
MySQL domyslnie ma wylaczone case-sensitivity, wiec musiales stworzyc pola tekstowe albo jako blob albo z wlasnoscia BINARY skoro rozrozna Ci litery duze i male.
Jesli z jakis powodow nie chesz tego zmieniac mozesz poprostu przekonwertowac oba sprawdzane stringi do duzych/malych liter i wtedy porownywac.
[sql:1:9ac3a6492d]SELECT * FROM dane
WHERE UPPER(pole) LIKE UPPER('%szukany_ciag%')
ORDER BY tytul
LIMIT ....[/sql:1:9ac3a6492d]
Musisz jednak pamietac, ze w tym przypadku musisz miec w mysql'u ustawione odpowiednie kodowanie (takie w jakim masz teksty w bazie, czyli np. ISO-8859-2), zeby mogl on zmienic male polskie litery (ążść...) na duze.
PS. php P. -> Bazy danych
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.