RaVns Blog | Webmastering, xHTML, CSS, PHP, MySQL, SEO/SEM, Windows i inne


 Smartwatch LG G Watch R W110 - okrągła koperta - 570 zł !!!
 Wentylator biurkowy HB 25Wat DF2302BR "nowy" - 68 zł !!!

paź/11

11

Zamiana polskich znaków diakrytycznych na ich odpowiedniki bez kropek, kresek i ogonków w zapytaniu MySQL

Zamiana polskich znaków diakrytycznych na ich odpowiedniki bez kropek, kresek i ogonków w zapytaniu MySQL

Może się zdarzyć, że przydałoby się nam takie rozwiązanie, aby w momencie wykonywania zapytania do bazy MySQL można było porównywać słowa, jakieś znaki, które posiadają w sobie polskie litery z innymi nieposiadającymi narodowych znaków diakrytycznych.

Możliwe również, że zależałoby nam na pozbyciu się lub zamianie polskich znaków na odpowiedniki bez kropek, kresek i ogonków np. podczas SELECT.

Czy usunięcie polskich znaków diakrytycznych i zamiana ich na ogólne/uniwersalne/angielskie odpowiedniki – jak to jest inaczej nazywane.

1. Potrzeby:

1.1. Porównanie dwóch wartości zmiennych, gdzie jedna to:
polska żółta gęś == polska zolta ges
z powyższego porównania efektem będzie false, a chcielibyśmy:
polska zolta ges == polska zolta ges
czyli true.

Gdy otrzymamy true możemy chcieć wypisać pełną nazwę kategorii i inne pola.

1.2. Inne to np. zamiana z:
Rafał potrzebował kiedyś takiej funkcji.
na:
Rafal potrzebowal kiedys takiej funkcji.

2. Funkcja odpowiedzialna za tą zamianę:

DELIMITER $$
CREATE FUNCTION `bez_pl_diakrytycznych`(t TEXT) RETURNS TEXT
BEGIN
    SET t = REPLACE(t, 'ą', 'a');
    SET t = REPLACE(t, 'Ą', 'A');
    SET t = REPLACE(t, 'ć', 'c');
    SET t = REPLACE(t, 'Ć', 'C');
    SET t = REPLACE(t, 'ę', 'e');
    SET t = REPLACE(t, 'Ę', 'E');
    SET t = REPLACE(t, 'ł', 'l');
    SET t = REPLACE(t, 'Ł', 'L');
    SET t = REPLACE(t, 'ń', 'n');
    SET t = REPLACE(t, 'Ń', 'N');
    SET t = REPLACE(t, 'ó', 'o');
    SET t = REPLACE(t, 'Ó', 'O');
    SET t = REPLACE(t, 'ś', 's');
    SET t = REPLACE(t, 'Ś', 'S');
    SET t = REPLACE(t, 'ż', 'z');
    SET t = REPLACE(t, 'Ż', 'Z');
    SET t = REPLACE(t, 'ź', 'z');
    SET t = REPLACE(t, 'Ź', 'Z');
    return t;
END

Może nawet nie przypuszczasz, ale tą funkcję wprowadzamy do bazy danych. Zostaje ona tam zapisana i dostępna do edycji. Nie ma potrzeby dodawania jej za każdym razem do zapytania, czy zamieszczania w kodzie PHP.

Jak wprowadzić funkcję do bazy MySQL?

  • Logujemy się np. do phpMyAdmin: http://localhost/phpMyAdmin/.
    Instalacja phpMyAdmin
  • Wybieramy bazę danych.
  • Klikamy SQL, wprowadzamy funkcję i klikamy wykonaj.
  • Wracamy do zakładki Struktura, gdzie poniżej spisu tabel widzimy link: Procedury i funkcje.
  • Tutaj możemy edytować, usunąć funkcję lub po słowie RETURNS TEXT dopisać kodowanie: CHARSET utf8.

3. Użycie

Ad 1.1. Przykładowo z paska adresu pobieramy nazwę kategorii, która jest bez polskich znaków przy pomocy GET.

Adres przyjaźnie wyglądający używający reguł w htaccess::

www.domena.pl/kategoria/polskie-zolte-gesi/

skrywa prawdziwy adres:

www.domena.pl/kategorie.php?nazwa_kategorii=polskie-zolte-gesi

więc w PHP przypisujemy wartość zmiennej GET o nazwie nazwa_kategorii do nowej zmiennej:

$nazwa_kategorii = $_GET['nazwa_kategorii'];
// czyli: $nazwa_kategorii = polskie-zolte-gesi

Teraz wypisujemy z bazy po nazwie kategorii (tej z adresu) inne pola kategorii: polskie żółte gęsi.
Zastosujemy funkcję zamieniającą polskie znaki na „ogólne” od razu w zapytaniu, pomijając tym samym PHP.

MySQL:

SELECT nazwa, pole1, pole2, pole3 FROM kategorie
WHERE bez_pl_diakrytycznych(nazwa) = '$nazwa_kategorii'

Zakładamy, że w tabeli kategorie nazwy kategorii są unikalne, aby nie było pomyłek,
a poszukiwany wiersz zawiera 4 pola o wartościach: ‚polskie żółte gęsi’, ‚wartość pola1′, ‚wartość pola2′ i ‚wartość pola3′.

W wyniku zostanie nam wypisana: nazwa kategorii, pole1, pole2, pole3.
A stanie się tak, ponieważ zastosowaliśmy funkcję zmieniającą nazwę kategorii zapisaną używając polskich znaków na ich odpowiednik bez diakrytycznych.

Ad 1.2. Funkcję można przetestować, aby zamieniła
żółta gęś ĄąĆćĘꣳŃńÓ󌜯żŹź na zolta ges AaCcEeLlNnOoSsZzZz:

SELECT bez_pl_diakrytycznych('żółta gęś ĄąĆćĘꣳŃńÓ󌜯żŹź');

Inne przykłady zastosowania:

SELECT nazwa, pole1, bez_pl_diakrytycznych(pole2), pole3
FROM kategorie
WHERE nazwa = bez_pl_diakrytycznych('$polskie_znaki') AND pole3 = 'coś';

——————
Funkcja zaczerpnięta z sieci – MIS.

VN:F [1.9.22_1171]
Rating: 3.0/6 (3 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 2 votes)
Zamiana polskich znaków diakrytycznych na ich odpowiedniki bez kropek, kresek i ogonków w zapytaniu MySQL, 3.0 out of 6 based on 3 ratings
Podziel się wpisem na:
  • Facebook
  • Śledzik
  • Twitter
  • email
  • Google Bookmarks
  • Google Buzz
  • Flaker
  • MySpace
  • Blip
  • Wykop
  • Poleć
  • co-robie
  • Spis
  • Spinacz
  • Wahacz
  • LinkedIn
  • Mój biznes
ustaw opis GG

Tagi: · · · · ·

Podobne wpisy:

Instalacja Apache, PHP i MySQL w systemie Windows
Instalacja Apache, PHP i MySQL w systemie Windows cz.2
Instalacja Apache, PHP i MySQL w systemie Windows cz.3
Różnice, problemy oraz pliki instalacyjne Apache w Windows
Instalacja phpMyAdmin na localhost

Starszy post <<

>> Nowszy post




Nie skomentowano jeszcze.

Skomentuj :-)

*

Powered by RaVns


Unikalnych: odwiedzających!
Dziękuję za zainteresowanie :)