![]() |
![]() |
![]()
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: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
To może tak:
tabela colors: id_color (PK) color_name varchar(50) tabela kolorywybór (colors_choice) colors_choice id_color_choice (PK) id_color (FK) id_user (FK) color_choice_status tinyint(1) tabela user: id_user (PK) id_color_choice (FK) (...) i teraz jeśli chcesz wyciągnąć kolory wybrane przez usera to wystarczy wyciągnać tablicę idków barw:
Natomiast jeśli user zmieni swój wybór to robimy update na rekordach w tabeli color_choice dla id_user=X i zmieniamy wartość pól color_choice_status z 1 na 0, a następnie inserty z nowym wyborem kolorów:
W ten sposób wyciągasz dane po kluczach obcych, wszystko - moim skromnym zdaniem - w sposób łatwy, a przy tym czytelny i wydajny |
|
|
![]() ![]() |
![]() |
Aktualny czas: 12.10.2025 - 09:00 |