Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pobranie danych używając nazw pól
Kshyhoo
post
Post #1





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Witam. Mam kolejny problem, z którym nie mogę sobie poradzić. Tabele:
  1. users
  2. id | name | adv1 | adv2 | adv3 | adv4 |
  3. ---+----------+------+------+------+------+
  4. 1 | Novak | | | | |
  5. 2 | Kovalski | | | | |
  6. 3 | Cebula | | | | |
  7.  
  8. adventure
  9. id | name
  10. ---+-------------
  11. 1 | nazwa 1
  12. 2 | nazwa 2
  13. 3 | nazwa 3
  14. 4 | nazwa 4

Wyświetlam dane z tabeli name (w pustych miejscach są liczby).
I teraz pytania:
1. Czy zdołam pobrać name z tabeli adventure posiadający tylko nazwy pól z tabeli users (adv1, adv2, adv3, adv4) ?
2. Jak inaczej (lepiej) przechowywać dane dotyczące usera?
Go to the top of the page
+Quote Post
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 807
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


1. Nie do końca rozumiem. Będziesz w stanie powiązać te tabele, jeśli w polach adv1-4 będą wartości odpowiadające kluczowi id z tabeli adventure.
2. Możesz powiązać tabele przez tabelę pośrednią user_adventure (pozbywasz się pól adv1-4):
Jeśli np. użytkownik 1 "ma" przygody 1 i 4, to wartości w tej tabeli będą następujące:
1,1
1,4
Jeśli dodatkowo jest ważna numeracja przygód, to w tej tabeli można dodać dodatkową kolumnę z numerem.
Dla powyższego przykładu byłoby:
1,1,1 (jeśli przygoda id=1 jest pierwsza, czyli odpowiada wypełnieniu adv1=1)
1,4,2 (jeśli przygoda id=4 jest druga, czyli odpowiada wypełnieniu adv2=4)
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #3





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




No właśnie takiego powiązania nie ma, więc się pytałem, czy mogę powiązać po nazwie. Czyli najlepszym rozwiązaniem będzie dodanie tabeli i łączenie po ID.
Generalnie problem jest taki. User1 odpala przygodę i zaprasza User3 i User4. Należy zanotować ich ID, wraz z datą. I to robię. Ale chcąc wyświetlić jakiekolwiek statystyki, jet już problem.

Chyba, że do tej tabeli zapiszę też nazwę przygody... ale to nieprofesjonalne ;p
Go to the top of the page
+Quote Post
trueblue
post
Post #4





Grupa: Zarejestrowani
Postów: 6 807
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


To jakie wartości obecnie przechowujesz w adv1-4, 0 lub 1?
To nie jest dobry pomysł, bo wtedy musi być założenie, że id w adventure mają zawsze numerację od 1-4 lub inną ale ciągłą.
Gdyby były tam wartości id przygód, to już lepiej. Ale ogranicza Cię to do 4-ech przygód. Najlepszym rozwiązaniem jest tabela przejściowa.
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #5





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Trzymam tam statystyki, ile kto i komu.
Mógłbym zliczać rekordy, ale chciałem zrobić to jak najprościej, żeby nie ukręcić bazy... no i muszę liczyć na moje umiejętności a nie jestem profesjonalistą.

Bo w sumie mam już trzecią tabelę:
  1. drops (przechowywane ID i czas)
  2. id | adv | user1 | user2 | user3 | datetime
  3. ---+-----+-------+-------+-------+-----------
  4. 1 | 1 | 1 | 3 | 2 | 1473542311
  5. 2 | 2 | 2 | 3 | 1 | 1473600401

Go to the top of the page
+Quote Post
trueblue
post
Post #6





Grupa: Zarejestrowani
Postów: 6 807
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Ta też powinna być rozbita.

W drops zostaje id, adv, datetime. Klucz główny na id+adv.
Dodatkowa tabela drops_user: id, adv, id_user, wartość. Klucz obcy id+adv (do drops) oraz id_user (do users).
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #7





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Nie, po co rozbita. Trzymam tam ID przygody i ID userów z datą a w tabeli users miałem te staty. To ew. dla ułatwienia mógłbym dać nową tabelę do statystyk, gdzie na bieżąco uaktualniał bym stan przygód
Go to the top of the page
+Quote Post
trueblue
post
Post #8





Grupa: Zarejestrowani
Postów: 6 807
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Dlatego, że ograniczasz liczbę userów do 3-ech i komplikujesz potencjalne zapytania.
Chyba, że specyfika "gry" jest taka, że w rozgrywce bierze udział 3-ech graczy. To już Twoja decyzja.
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #9





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Graczy jest więcej, ale w rozgrywce bierze udział 2 lub 3.
Go to the top of the page
+Quote Post

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: 21.10.2025 - 11:22