Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: SQL REPLACE
Forum PHP.pl > Forum > Bazy danych > MySQL
VegetaSSJ
Witam!

Koledzy mam problem. Chciałem zrobić pobieranie artykułów z bazy danych na podstawie tytułu, tzn powiedzmy takim urlem:
domena.pl/artykuly/czytaj/tytul,zytnia_mocna . Mam tabelę w której są mni pola:
id - auto_inc pr_key, title - unique.

Problem jest taki że w tabeli w polu title mogą być polskie znaki, ponieważ pole to używane jest również do listowania artykułów. W url ze względu na zgodność z przeglądarkami a gównie IE nie mogę przesyłać polskich znaków, tzn muszę je zastępować przez odpowiedniki ó - o, ż - z, itd. Czyli w skrypcie mam tytuł zytnia_mocna a w bazie żytnia_mocna. Jak teraz wykonać SELECTA żeby pobrał wyniki z dopasowania tytułów ? Wiem że jest funkcja REPLACE, mogę wykonać takie zapytanie, SELECT id, title FROM artykuly WHERE REPLACE(title, 'ż', 'z') = 'żytnia mocna' ale problem w tym że to działa tylko dla jednej litery. W php jest funkcja str_replace w której jako argumenty można podać tablice znaków np str_replace('zytnia_mocna', array('ż','ó', ...), array('z', 'o', ...)) ale jak to zrobić w SQL. Jeżeli jakaś tęga głowa ma pomysł jak rozwiązać mój problem bardzo proszę o pomoc.

Sam osobiście wpadłem na taki pomysł że dodam do tabeli jeszcze jedną kolumnę z kluczem do porównywania tzn będzie
title - żytnia_mocna, key - zytnia_mocna, ale może jest na to innt sposób ?
ayeo
Twój sposób jest ok. Możesz też za pomocą str_replace(); przerobić stringa i dopiero wstawić do w zapytanie sql. winksmiley.jpg Pozdrawiam!
VegetaSSJ
kolego nie zrozumiałeś ja mam w skrypcie string już bez polskich znaków a w bazie z polskimi.
ayeo
Rzeczywiście, sorry! Trochę nie zrozumiałem problemu. Wybacz.
Jeśli tak to nie odwrócisz stringa bez polskich znaków na stringa z polskimi smile.gif Musiałbyś używać słownika, a i to nie daje 100% poprawności. Twój sposób z dodatkową kolumną w tabeli jest ok. Jest nawet zgodny z zasadami normalizacji baz danych biggrin.gif Pozdrawiam!
nevt
jeżeli w bazie masz kodowanie UTF-8 to:
  1. SELECT * FROM tabela WHERE pole = 'zytnia_wodka' COLLATE utf8_general_ci;

wyszuka ci ignorując polskie znaki, z kolei
  1. SELECT * FROM tabela WHERE pole = 'żytnia_wódka' COLLATE utf8_polish_ci;

dopasuje tylko jeśli nasze ogonki będą się zgadzać ...
tdzierza
Witam.

Przepraszam że odkopuje taki stary temat, ale chce potwierdzić prawdziwość ostatniego posta.

Przeprowadziłem podobne próby i nie działa mi to.

Gdy załóżmy w bazie mamy słowo żytnia_wódka,
to odnalezienie jest możliwe tylko po wpisaniu dokładnie tego słowa, nie ignoruje w żadnym wypadku polskich znaków
wookieb
A jakie masz kodowanie danego pola, tabeli, bazy danych?
tdzierza
kodowanie mam ustawione na: utf8
a metodę porównania napisów: utf8_general_ci
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.