Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Operacje na tabliacach + MySQL, Pytanie o poprawność kodu
-lukasamd-
post
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.


  1. <?php
  2. $user_id = 1;
  3.  $gra_id = 1;
  4.  
  5.  $ulubione = mysql_fetch_array(mysql_query("SELECT user_ulubione FROM ".DB_USERS." WHERE user_id = '".$user_id."'"));
  6.  $ulubione = explode('.' , $ulubione['user_ulubione']);
  7.  
  8.  $id = array_search($gra_id, $ulubione);
  9.  unset($ulubione[$id]);
  10.  asort($ulubione);
  11.  
  12.  $nowa = array_shift($ulubione);
  13.  while($krok = array_shift($ulubione)) {
  14.    $nowa .= '.'.$krok;
  15.  }
  16.  
  17.  mysql_query("UPDATE ".DB_USERS." SET user_ulubione = '".$nowa."' WHERE user_id = '".$user_id."'");
  18. ?>



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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
-lukasamd-
post
Post #2





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:

  1. <?php
  2. mysql_query("DELETE FROM ".DB_ULUBIONE." WHERE ulubione_user = '".$user_id."' AND ulubione_gra = '".$gra_id."'");
  3. ?>


lub
  1. <?php
  2. $czas = time();
  3. mysql_query("INSERT INTO ".DB_ULUBIONE." VALUES ('".$user_id."', '".$gra_id."', '".$czas."')");
  4. ?>
Go to the top of the page
+Quote Post

Posty w temacie
- lukasamd   Operacje na tabliacach + MySQL   23.06.2009, 11:16:03
- - blooregard   Ja bym to rozdzielił: tabela 'Ulubione', ...   23.06.2009, 11:23:59
- - lukasamd   Tyle raczej nie będzie, max. 100? Oprócz doda...   23.06.2009, 11:33:18
- - trionet   Ja bym wybrał więcej zapytań. Podział na kilka tab...   23.06.2009, 11:59:25
- - lukasamd   W sumie już zauważyłem, że mogę dodać np. datę kie...   23.06.2009, 13:13:29
- - blooregard   No i o to chodziło.   23.06.2009, 19:41:29


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 11.10.2025 - 08:43