![]() |
![]() ![]() |
![]() |
-lukasamd- |
![]()
Post
#1
|
Goście ![]() |
Witam,
mam kod, który spełnia swoje zadanie, jednak nie jestem pewien, czy oby na pewno jest do końca poprawny i optymalny. W bazie danych w tabeli z użytkownikami mam tekstowe pole user_ulubione, zawierające informacje o ulubionych grach użytkownika (id łączone kropką np. 1.5.21.32). Operacja kodu sprowadza się do usunięcia jednej z gry, dla testu przyjąłem id usera 1 i id gry 1. Najpierw pobieram wartości z bazy, następnie tworzę z nich tablicę dzieląc wartości znakiem kropki. Później szukam w tabeli określonej wartości (id gry), w wyniku otrzymuję klucz. Usuwam z tabeli wartość o podanym kluczu. Sortuję tablicę wg. wartości. Tworzę zmienną typu string, do której wrzucam pierwszy element tablicy a zarazem usuwam go z niej. W pętli while doklejam do zmiennej pozostałe wartości i znaki kropek je oddzielające. Uaktualniam pole w bazie danych.
Czy dobrze to zrobiłem, czy da się lepiej? Zależy mi na wydajności, sposób zapisywania informacji o ulubionych w bazie musi pozostać taki jaki jest. |
|
|
![]()
Post
#2
|
|
![]() Newsman Grupa: Moderatorzy Postów: 2 033 Pomógł: 290 Dołączył: 21.12.2007 Skąd: Łódź ![]() |
Ja bym to rozdzielił: tabela 'Ulubione', 'User' oraz 'Ulubione_to_user', gdzie jeden rekord to relacja ulubiona->user
Rozwiązania z wieloma wartościami w jednym polu, rozdzielane kropeczkami, czy też innym znaczkami, są fajne i proste do czasu, gdy nie trzeba z tymi danymi zrobić czegos bardziej skomplikowanego. Albo jak tych ulubionych będzie kilkaset. -------------------- Life's simple... You make choices and don't look back...
|
|
|
-lukasamd- |
![]()
Post
#3
|
Goście ![]() |
Tyle raczej nie będzie, max. 100?
Oprócz dodawania / usuwania i wyświetlania w profilu usera na bank nic więcej nie będzie robione z ulubionymi. Gdy rozdzielę, to przy usuwaniu i dodawaniu wykonuję tylko 1 zapytanie i nic poza tym, więc wydaje się ok. Z drugiej strony, przy sprawdzaniu czy gra znajduje się w ulubionych muszę wykonać 1 zapytanie więcej. Przy wyświetlaniu ulubionych również (dane z tabeli użytkowników i tak są pobierane, więc gdy te informacje są w niej, można to pominąć). Tak więc pytanie: więcej zapytań czy więcej pracy po stronie PHP? Ten post edytował lukasamd 23.06.2009, 11:34:21 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 12 Pomógł: 1 Dołączył: 6.08.2008 Skąd: Gostyń Ostrzeżenie: (0%) ![]() ![]() |
Ja bym wybrał więcej zapytań. Podział na kilka tabel może zaowocować w przyszłości
![]() ![]() |
|
|
-lukasamd- |
![]()
Post
#5
|
Goście ![]() |
W sumie już zauważyłem, że mogę dodać np. datę kiedy gra została dodana do ulubionych, wtedy tylko jako osobna tabela.
Dodałem więc tabelę ulubione i w niej (póki co) 3 pola: - ulubione_user (indeks) - ulubione_gra (indeks) - ulubione_czas Operacja zarówno dodania lub usunięcia gry z ulubionych ogranicza się do:
lub
|
|
|
![]()
Post
#6
|
|
![]() Newsman Grupa: Moderatorzy Postów: 2 033 Pomógł: 290 Dołączył: 21.12.2007 Skąd: Łódź ![]() |
No i o to chodziło.
-------------------- Life's simple... You make choices and don't look back...
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 16.07.2025 - 05:23 |