Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> pytanie co do optymalizacji kodu
Mefisto_87
post
Post #1





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 24.11.2008

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


Witam stworzyłem sobie klase dla obiektu i w funkcji __construct chciałbym pobrać różne przedmioty gracza(ekwipunek,mikstury,zwoje etc). Przedmioty te, rzecz jasna znajdują się w osobnych tabelach w bazie i mają różne nazwy pól. Chciałem stworzyć jedną tylko metodę get_item() dla klasy sklepu, która pobierałaby wszystkie dostępne itemki i wrzucała by je do jednej tablicy $I. Może przedstawię to na przykładowym kodzie.

Tak mógłbym uzyskać to w standardowy sposób
  1. /*
  2. $tab - tablica w bazie
  3. $type - typ broni,mikstury etc
  4. $status - status itemka
  5. $id - id gracza/sklepu
  6. $iowner - przedmiot znajduje sie albo u gracza(person) lub w sklepie(shop)
  7. */
  8. function get_item($tab,$type,$status,$id,$iowner){
  9. $_item=mysql_query("SELECT * FROM `".$tab."` WHERE `status`='".$status."' AND `type`='".$type."' AND `owner`=".$id);
  10. if(mysql_num_rows($_item)>0){
  11. while($item=mysql_fetch_assoc($_item)){
  12. $this->I[$iowner][$tab][$type]=array('nazwa'=>$item['x'],'waga'=>$item['y'],'moc'=>$item['z']);
  13. }
  14. /*Ja chciałbym zamiast while od razu dać coś podobnego do
  15.   $this->I[$iowner][$tab][$type]= i tu wszystkie dane dla danych itemków
  16.   */
  17. }
  18. }


Niestety powyższy sposób zmusiłby mnie to napisania osobnych funkcji pobierania dla każdej tabeli w bazie, ponieważ mają one różną ilość pól i różne nazwy. Czy jest jakiś sposób, by to ominąć i pobrać jakoś inaczej (nie za pomocą while)wszystkie dane z tabeli?




Go to the top of the page
+Quote Post
zend
post
Post #2





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


Tworzysz kilka klas, każda klasa pobiera swoje typy i formatuje do takiej postaci jakiej chcesz
Go to the top of the page
+Quote Post
Mefisto_87
post
Post #3





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 24.11.2008

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


nie chcę tworzyć kilku klas , mam jedną klase sklep i chcę pobrać za pomocą tylko jednej metody get_item() ,wszystkie dane o ekwipunku, eliksirach, zwojach itd. Jak pobieram zwykłym whilem to muszę wypisywać konkretne nazwy pól, a właśnie tego chcę uniknąć. Wtedy jedna metoda mógłbym pobrać ekwipunek , który ma np 5 pól i załadować do tablicy I['eq']['gracza']['bronie'][i tu tablca z broniami i danymi o 5 polach z bazy] oraz np zwoje , które przypuśćmy mają 3 pola i załadować je w I['zwoje']['gracza']['zwoje magiczne'][i tu tablca ze zwojami magicznymi i danymi o 3 polach z bazy].

Ten post edytował Mefisto_87 16.06.2010, 15:29:55
Go to the top of the page
+Quote Post
zend
post
Post #4





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


To jedna metoda do fetchowania danych, jedna co te dane będzie zwracać (wszystkie) i po jednej metodzie na każdą tabelkę
Go to the top of the page
+Quote Post
phpion
post
Post #5





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Co do problemu z pobieraniem danych z kilku tabel: zainteresuj się UNION.
Co do problemu z nazwami kolumn: mysql_fetch_row (aczkolwiek korzystając z UNION wszystkie kolumny z różnych tabel będą miały takie same nazwy).

Ten post edytował phpion 17.06.2010, 10:02:37
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: 25.09.2025 - 01:49