piotr94
21.06.2011, 13:58:20
Witam!
Mam wielojęzyczny system, w którym w polu nazwa w bazie danych przechowywane są nazwy we wszystkich językach jako zserializowane tablice asocyjacyjne.
(czyli pole zawiera np. wynik działania funkcji serialize(array('pl'=>'Nazwa polska',en=>'English name')), czyli a:2:{s:2:"pl";s:12:"Nazwa polska";s:2:"en";s:12:"English name";})
I teraz mam takie pytanie, czy istnieje jakaś szybka metoda na sortowanie wyników zapytania według pola nazwa w określonym języku?
Chodzi mi tu o sortowanie danych bez żadnych zmian struktury bazy danych, bo wiem, ze najlepszym rozwiązaniem byłoby utworzenie dodatkowych tablic z nazwami i odwoływanie się do odpowiednich tablic poprzez numery id rekordów w tablicy głównej, ale takie działanie wymaga zmiany struktury dosyć sporej bazy danych.
Z góry dziękuję za pomoc.
tehaha
21.06.2011, 15:22:48
Możliwe? - Raczej tak
Możliwe w prosty sposób? - Na pewno nie
Tutaj masz temat jak koleś posortował wyniki po wartości znajdującej się w zmiennej w formacie json, więc analogicznie mógłbyś to zrobić u siebie, sposób bardzo ciekawy, aczkolwiek radziłbym Ci przerobić strukturę danych, bo jak w jednej zmiennej trzymasz wiele zmiennych to znaczy, że jest źle zaprojektowana baza ->
http://www.phpbuilder.com/board/showthread.php?t=10363945
elektrrrus
21.06.2011, 15:32:25
Takie sortowanie jest możliwe tylko jeśli napiszesz sobie procedure w bazie która będzie w loce te dane wyciągać z serializowanego ciągu i na podstawie tego sortować. Niewydajne to to mocno.
Baza jest źle zaprojektowana jeśli trzeba się uciekać do czegoś takiego, jedyne wyjście to zmiana jej struktury.
piotr94
21.06.2011, 21:30:22
Dzięki za pomoc, w takim razie trzeba przekonwertować bazę na wiele zależnych tabel, tak jak być powinno;-)