Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: pytanie co do optymalizacji kodu
Forum PHP.pl > Forum > PHP
Mefisto_87
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?




zend
Tworzysz kilka klas, każda klasa pobiera swoje typy i formatuje do takiej postaci jakiej chcesz
Mefisto_87
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].
zend
To jedna metoda do fetchowania danych, jedna co te dane będzie zwracać (wszystkie) i po jednej metodzie na każdą tabelkę
phpion
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).
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.