Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Prosze o ocene rozwiązania.
Forum PHP.pl > Forum > Bazy danych > MySQL
karolski
Mam problem który rozwiązałem ale nei wiem czy dobrze się sprawdzi na dłuzsza mete. Mam moduł wyświetlania profili zarejestrowanych użytkowników z przynależnością do danej dywizji lecz jeden profil może należeć do kilku dyzwizji i tu mam problem bo w tabeli user mam pole dywizja i teraz ja sobie tak to obmyslilem zeby jezeli profil ma wiecej przynaleznosci dodac mu w polu dywizja pierwszadywizja, drugadywizja itd. i przy wyswietlaniu użyć nastepującego zapytania:
  1. SELECT *
  2. FROM user WHERE dywizja LIKE '%$pierwszadywizja%' ORDER BY id DESC


Napiszcie co o tym sądzicie może macie jakies inne sprawdzone pomysły questionmark.gif
SongoQ
Z tego co zauwazylem to masz w polu dywizja wpisane wszystkie dywizje np oddzielone ";"

Ja bym to inaczej zrobil

tabela user
tabela dywizja
tabel laczaca usera z dywizja

user:
id | login | ........
dywizja:
id | ..............
dywizja_user:
id | user_id | dywizja_id
karolski
gdzie i pod jakimi hasłami moge poczytać o łączeniu tabel ?
SongoQ
Algebra relacji. W helionie jest kilka ksiazek na ten temat.
karolski
a mozesz podac jakis link do strony gdzie to jest opisane tzn jak ustawic relacje w phpmyadmin albo normalnie przy pomocy skryptu CREATE TABLE...
patrzyłem dokumentacje phpmyadmina ale tam nic nie ma a po strona chodzilem to jak to ustawic to nigdzie nie pisza smile.gif
SongoQ
Niestety linkow zadnych nie znam ale w phpmyadminie robisz 2 tabele jako INNO DB zakladasz indeksy na pola ktore maja byc powieazane i dajesz widok relacyjny tam wybierasz co ma byc z czym powiazane i ustalasz dla UPDATE I DELETE typ relacji.
karolski
Kod
$cfg['Servers'][$i]['pmadb'] ...  OK
  
$cfg['Servers'][$i]['relation'] ...  błąd [ Dokumentacja ]
Ogólne funkcje relacyjne: wyłączone
  
$cfg['Servers'][$i]['table_info'] ...  błąd [ Dokumentacja ]
Funkcje wyświetlania: wyłączone
  
$cfg['Servers'][$i]['table_coords'] ...  błąd [ Dokumentacja ]
$cfg['Servers'][$i]['pdf_pages'] ...  błąd [ Dokumentacja ]
Tworzenie PDF-ów: wyłączone
  
$cfg['Servers'][$i]['column_info'] ...  błąd [ Dokumentacja ]
Wyświetlanie komentarzy dla kolumn: wyłączone
Zapamiętane zapytanie SQL: wyłączone
MIME ... błąd [ Dokumentacja ]
$cfg['Servers'][$i]['history'] ...  błąd [ Dokumentacja ]


troche duzo meczenia, u sibei a pozniej jeszcze na docelowym hoscie sad.gif a co sadzicie o tym pierwszym rozwiazaniu to moze sie jakos wywali bo jest taki mega prostackie ale chyba by działało tongue.gif
SongoQ
Jak duzo meczenie, robisz zrzut bazy a potem na serwer i juz. Rozwiazanie Twoje jest tez ok, ale dla wielu rekordow spada wydajnosci, tak jak ty zrobiles reczej sie odchodzi o takiego zalozenia, po to sa relacje.
karolski
  1. CREATE TABLE nuclear_dywizja (
  2.   gracz_dywizja_id int(5) UNSIGNED NOT NULL AUTO_INCREMENT,
  3.   graczid smallint(5) DEFAULT '0' NOT NULL,
  4.   dywizja smallint(5) DEFAULT '0' NOT NULL,
  5.   PRIMARY KEY (gracz_dywizja_id)
  6. );
  7.  
  8.  
  9. CREATE TABLE nuclear_gracz (
  10.   graczid int(11) NOT NULL AUTO_INCREMENT,
  11.   nick varchar(100) NOT NULL,
  12.   realname varchar(255) NOT NULL,
  13.   birthday date DEFAULT '0000-00-00' NOT NULL,
  14.   location varchar(100) NOT NULL,
  15.   country char(3) NOT NULL,
  16.   email varchar(255) NOT NULL,
  17.   homepage varchar(150) NOT NULL,
  18.   gg varchar(30) NOT NULL,
  19.   img varchar(255) NOT NULL,
  20.   PRIMARY KEY (graczid)
  21. );


teraz w tabeli dywizja kazdy rekord otrzymuje swoj id i wg mnie nie powinno byc problemu co wy teraz an to winksmiley.jpg ?
SongoQ
No nie do konca tak, bo co jesli 2 graczy jest z ta sama dywizja?
Zobacz na przyklad ktory podalem Ci powyzej. Dalem tam tabelke wiazaco midzy graczem a dywizja.
karolski
  1. CREATE TABLE nuclear_gry (
  2. graid smallint(5) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. gra varchar(100) NOT NULL DEFAULT '',
  4. granazwa varchar(10) NOT NULL DEFAULT '',
  5. graico varchar(100) NOT NULL DEFAULT '',
  6. PRIMARY KEY (graid)
  7. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
  8.  
  9. CREATE TABLE nuclear_gracz (
  10. graczid int(11) NOT NULL AUTO_INCREMENT,
  11. nick varchar(100) NOT NULL DEFAULT '',
  12. imienazwisko varchar(255) NOT NULL DEFAULT '',
  13. urodziny date NOT NULL DEFAULT '0000-00-00',
  14. miasto varchar(100) NOT NULL DEFAULT '',
  15. kraj char(3) NOT NULL DEFAULT '',
  16. email varchar(255) NOT NULL DEFAULT '',
  17. strona varchar(150) NOT NULL DEFAULT '',
  18. gg varchar(30) NOT NULL DEFAULT '',
  19. PRIMARY KEY (graczid)
  20. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
  21.  
  22. CREATE TABLE nuclear_graczgry (
  23. graczgryid int(5) UNSIGNED NOT NULL AUTO_INCREMENT,
  24. graczid smallint(5) NOT NULL DEFAULT '0',
  25. graid smallint(5) NOT NULL DEFAULT '0',
  26. PRIMARY KEY (graczgryid)
  27. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;


dobra jest to jakos tak smile.gif ale teraz amm pytanie czy jak teraz z tymi tabelami pracuje to zwyczajnie dodaje INSERT INTO ... do kazdej tabeli dane gracza pozniej uzupelelaniam tak samo tabele graczgry i pozniej używam złączeń przy wyświetlaniu tak questionmark.gifquestionmark.gif


--------------------------------------

tak z beczki obok to jakie ksiązki polecacie o SQL-u ale nie takich podstawach typu jak wstawic tylko juz zaczynajac od takich problemow jak ten i standartach bd questionmark.gifquestionmark.gifquestionmark.gif? o tytuły prosze
SongoQ
Cytat
dodaje INSERT INTO ... do kazdej tabeli dane gracza pozniej uzupelelaniam tak samo tabele graczgry i pozniej używam złączeń przy wyświetlaniu tak questionmark.gifquestionmark.gif


Oczywiscie mozesz dodawac samych graczy bez uzypelniania pozostalych tabel, jak rowniez mozesz wyciagac dane tylko z jednej tabeli. Jesli wyciagasz dane z n tabel to musisz laczyc.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.