Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Tablica z danymi według pola
ZuyPan
post
Post #1





Grupa: Zarejestrowani
Postów: 116
Pomógł: 4
Dołączył: 4.02.2010

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


Witam.
Mam problem: W bazie danych mam tabelę item w której trzymam przedmioty graczy. Jej struktura jest następująca:
* id - klucz
* vnum - id przedmiotu z innej tabeli (zawiera ona informacje o przedmiotach)
* window - informacja o tym gdzie jest item (założony = EQUIPMENT i to nam wystarczy)
* owner_id - id posiadacza przedmiotu
* pos - jeśli przedmiot jest założony to jest to slot. Wartości prezentują się następująco:
0 - zbroja
1 - helm
2 - buty
3 - bransoleta
4 - broń
5 - naszyjnik
6 - kolczyki
10 - tarcza

Chcę najpierw pobrać wszystkie założone przedmioty przez gracza. Teoretycznie proste zapytanie:
  1. $ekwipunek = mysql_fetch_array(mysql_query("SELECT * FROM item WHERE owner_id = '$id' AND window='EQUIPMENT'"));

Jednakże chciałbym utworzyć coś w stylu:
$zbroja_id = $ekwipunek['pos' = 0];
$helm_id = $ekwipunek['pos' = 1];
...
$tarcza_id = $ekwipunek['pos' = 10];
Wiem, że to błędny zapis, ale nie wiem jak to zrobić. Chodzi o to aby np. $zbroja_id zawierała w sobie wartość pola vnum gdzie pole pos = 0. myślałem o pętli foreach i nawet próbowałem, ale po kilku godzinnej walce się poddałem. Oczywiście mógłbym zrobić to za pomocą kilku zapytań:
  1. $zbroja = mysql_fetch_array(mysql_query("SELECT * FROM item WHERE owner_id = '$id' AND window='EQUIPMENT' AND pos='0'"));
  2. $zbroja_id = $zbroja['vnum'];
  3.  
  4. $helm = mysql_fetch_array(mysql_query("SELECT * FROM item WHERE owner_id = '$id' AND window='EQUIPMENT' AND pos='1'"));
  5. $helm_id = $helm['vnum'];
  6.  
  7. //itd

Takie rozwiązanie na pewno nie jest optymalne. Jak więc to rozwiązać?

Kolejną sprawą jest: jak już będę miał odpowiednie id przedmiotu w odpowiednich zmiennych i będę chciał pobrać nazwy tych przedmiotów z innej tabeli (id przedmiotu z tej tabeli to vnum zapisane do zmiennej) to chciałbym zrobić to hurtowo aby za każdym razem nie robić zapytania w stylu:
  1. $zbroja_info = mysql_fetch_array(mysql_query("SELECT * FROM itemy WHERE id='$zbroja_id'"));
  2. $zbroja_nazwa = $zbroja_info['nazwa'];
  3.  
  4. $helm_info = mysql_fetch_array(mysql_query("SELECT * FROM itemy WHERE id='$helm_id'"));
  5. $helm_nazwa = $helm_info['nazwa'];
  6. //itd.

Oto moje dwa problemy. Proszę o pomoc ;)

Ten post edytował ZuyPan 25.07.2011, 19:29:25
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Piogola
post
Post #2





Grupa: Zarejestrowani
Postów: 151
Pomógł: 36
Dołączył: 1.02.2011
Skąd: Warszawa

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


  1. SELECT itemy.*, item.* FROM item, itemy WHERE itemy.id = item.vnum AND window='EQUIPMENT' AND item.owner_id = '$id'

Powinieneś dostać potrzebne tobie dane


--------------------
Google Manual
Go to the top of the page
+Quote Post
DiH
post
Post #3





Grupa: Zarejestrowani
Postów: 251
Pomógł: 34
Dołączył: 7.01.2010

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


ci*
Go to the top of the page
+Quote Post
ZuyPan
post
Post #4





Grupa: Zarejestrowani
Postów: 116
Pomógł: 4
Dołączył: 4.02.2010

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


Wszystko fajnie spoko, ale... To chyba nie o to mi chodziło wink.gif W Twoim zapytaniu nigdzie nie ma mowy o polu "pos". A to właśnie pole pos ma być takim jak by kluczem. Jeszcze raz przedstawię to na przykładzie:

$helm_id = $ekwipunek['pos' == 1];
a teraz za pomocą opisu "słownego"

zmienna $helm_id zawiera w sobie zawartość pola vnum z rekordu w którym wartość pola pos wynosi 1
i tak z wszystkimi przedmiotami czyli np.

$zbroja_id = $ekwipunek['pos' == 0];
zmienna $zbroja_id zawiera w sobie zawartość pola vnum z rekordu w którym wartość pola pos wynosi 0


A z Twoim zapytaniem nie umiem czegoś takiego wykonać.


--------------------
Blog
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 18:02