![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 55 Pomógł: 0 Dołączył: 31.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam problem, z optymalizacją.
Mam strone, gdzie loguja się uzytkownicy i w swoim profilu maja kilka opcji do wyboru (ok 15). przykładowo: ulubiony kolor: [_] zielony [_] niebieski [_] czerwony itp. do tej pory rozwiazałem problem tak, że w bazie danych mam kolumne kolory i tam zapis w postaci 1.0.0.1.1.1.1.0.1.0... 1 odpowiada włączonej opcji, 0 wyłaczonej W sumie działa jak powinno, ale musze te dane obrabiać, explodem i jest problem z kolejnością, bo dane muszą zawsze wyswietlać się w kolejnosci jaka pierwotnie została podana w array zadeklarowanym w dokumencie. Druga sprawa to problem z wyszukiwaniem, bo stworzenie zapytania gdzie WHERE wygląda np tak. WHERE kolor = 0.0.0.0.0.0.1.1.0.0.0.0 OR 1.1.1.1.1.0.0.0.0.0 itp jest trochę na około. Czy jest mozliwość rozwiązania tego w inny sposób? Wymysliłem dwa rozwiązania, ale nie wiem czy bedą one optymalne: #1 dwie tabele, jedna z definicją kolorów id | kolor 1 | niebieski 2 | zielony druga wybory id | user | wybor_1 | wybor_2 | wybor_3 1 | 1 | true | flase | true php sprawdza opcje wyszukujac kluczy "WHERE wybor_"kolor.id - trochę lepsze rozwiązanie, ale chyba nadal jest to nie to co ma być, bo dopisanie kolejnego koloru dowyboru musze dopisać kolejną kolumne w "wyborach" #2 drugie rozwiązanie siedzi u mnie tylko w głowie, bo nie wiem jak do końca to rozwiązać. Mianowicie utworzenie tabeli np. wybory, gdzie jako nazwy kolumn będa opcje możliwe do wyboru (niektóre zawierają polskie znaki, znaki /\-=+). np. id | user | niebieski | zielony | czerwony | jasno-żółty 1 | 1 | true | true | false | true i pytanie co jest lepsze w filtrowaniu danych. Jak wyświetlić na stronie tylko nagłówki kolumn z pominieciem id i user. Ewentualnie jaki jeszcze inny sposób proponujecie na rozwiązanie tej zagwostki w taki sposób, aby łatwo było napisać pod to wyszukiwarkę. Ten post edytował exseerius 2.11.2009, 14:01:18 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 61 Pomógł: 9 Dołączył: 22.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Czemu na upartego robić to po stronie PHP ? Wszystko na około :]
Nie prościej będzie skorzystać z typu SET w SQL ? http://dev.mysql.com/tech-resources/articl...t-datatype.html myset SET('zielony','czerwony','niebieski') Na danych w SET pracujesz jak na flagach: zielony 00000001 czerwony 00000010 niebieski 00000100 Można robić & i || (np: zielony & niebieski = 5). Jedyny limit to 64 elementy w tym typie danych, ale z opisu Twojego problemu wynika, że w tym przypadku jest to idealne rozwiązanie. Nie będę tu przeklejał tutoriala. Pocztaj linka którego dałem powyżej. Dodam tylko, że jeszcze jedna ważna sprawa to możliwość wyszukiwania pomiędzy wartościami od razu na bazie. Wyciąganie tego do PHPa i explode strasznie nieekonomiczne, bo wyciągasz z bazy wiersze których możesz nigdy nie użyć bo po zrobieniu explode może się okazać, że wiersz ten nie spełnia Twoich oczekiwań. W przypadku proponowanego przeze mnie rozwiązania masz to gotowe: SELECT * FROM tabela WHERE myset LIKE '%zielony%niebieski%'; SELECT * FROM tabela WHERE myset & 5 = 5; Myślę, że reszte doczytasz sam. Chciałem tylko naprowadzić Cię na rozwiązanie (IMG:style_emoticons/default/smile.gif) Aha no i oczywiście najlepiej sobie podefiniować zmienne define('') w PHPie zgodne z SQL do wygodnego korzystania (IMG:style_emoticons/default/smile.gif) Ten post edytował Ges 15.11.2009, 22:07:20 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 9.10.2025 - 05:03 |