Archiwum tagu ‘mysql’

MySQL – Wyszukiwanie “google like”

Dużym atutem googlowskiej wyszukiwarki, jest możliwość używania znaków jak ‘-’ czy ‘+’ oraz ‘”‘ . Pozwalają one na znalezienie wyników, np. z pominięciem jakiegoś słowa.

Gdy każemy google, wyszukać “Dell D4020″, to znajdzie zarówno jego recenzje, czy też sklepy w jakich się on znajduje. Jeśli nie chcemy widzieć np. ofert różnych sklepów, wpisujemy “Dell D4020 -sklep” itd. itd.

Aby zaimplementować wyszukiwarkę o takiej możliwości na naszej stronie, trzeba spełnić kilka zasad.

Pole w tabeli, który będzie przeszukiwane, musi być FULLTEXT’owe.

ALTER TABLE usertable ADD FULLTEXT(userfield);

Natomiast samo polecenie wyszukujące, musi być mniej więcej takie:

SELECT Field, MATCH(Field) AGAINST($SEARCH_PHRASE IN BOOLEAN MODE) AS
Score FROM usertable WHERE MATCH(Field) AGAINST (‘$SEARCH_PHRASE IN BOOLEAN
MODE);

Gdzie $SEARCH_PHRASE to oczywiście odpowiednio przefiltrowana fraza wyszukująca, jak np. “dell d420 -sklep”.

Po wykonaniu takiego polecenia otrzymamy wszystkie wpisy pasujące do wzorca, mało tego, otrzymamy je wraz z punktami trafności. Jeśli dodamy do tego odpowiednie ORDER BY, otrzymamy je posortowane wg. uznania.

Bash – tworzenie miniaturek wraz z generowaniem sql.

#!/bin/bash
GEOMETRY=$1
if [ "$GEOMETRY" -lt 1 ]
then
#128px width thumbnails default
GEOMETRY=128
fi

for filename in *jpg

do
convert -quality 85 -geometry x$GEOMETRY $filename ~/thumbs/$filename
echo “INSERT INTO photos (photo_url) VALUES(‘$filename’)” >> ./database.sql
done

MySQL, Plik, str_replace i polskie znaki…

Przyszło mi ostatnio pracować na dostarczonej przez zleceniodawcę bazie.
Teoretycznie posiadała ona kodowanie utf-8 general ci, więc wszystkie pliki miały charset utf-8, oraz same były kodowane w tymże zestawie znaków.
Nie mogłem uzyskać tych cholernych polskich znaczków. Dopiero po zmianie charsetu (head) na iso-8859-2 uzyskałem polskie znaki.
Jednak coś tu było nie tak – nie działało str_replace, nie mogłem zamienić polskich znaków na ich bezogonkowe odpowiedniki.
Z rozwiązaniem przyszedł mój przyjaciel któremu jestem dozgonnie wdzięczny za to.

Zmiana zestawu znaków tabeli:

ALTER TABLE `tabela` DEFAULT CHARACTER SET latin2 COLLATE latin2_general_ci

Oraz kodowanie wszystkich plików w iso-8859-2 + ustawienie w head, charsetu iso-8859-2.
Działa idealnie.

Optymalizacja

Jako że skończyłem praktycznie moją stronę domową, zabrałem się za jej optymalizację, którą podzieliłem na kilka etapów (w nawiasach podane ile dało się zaoszczędzić):
- code cleanup (10kb)
- optymalizacja kodu php (2 kb)
- optymalizacja kodu mysql (zyskałem trochę na czasie)
- optymalizacja kodu css (2kb: http://iceyboard.no-ip.org/projects/css_compressor)
- optymalizacja obrazków (z 1024 kb zrobiło się 18kb!)
- optymalizacja obrazków dzieliła się na:
-znalezienie punktów wspólnych obrazków, zmniejszenie ich rozmiarów
-kompresja z użyciem optipng (7 poziom kompresji)
-tam, gdzie był mały/praktycznie żaden spadek jakości, użyłem jpg

Cała strona, waży teraz dokładnie 24kb.