Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dwie kolumny
Forum PHP.pl > Forum > Bazy danych > MySQL
MagicianVH
Mam dwie tabele:

1. Player z kolumną PID i Name. PID to unikalna dla każdego wartość.
2. Log z kolumną Operacja, Player1, Player2. (Player1, Player2 zawiera numer PID)

Przy wyświetlaniu wyników zamiast numerków chciałbym, żeby widniały nicki graczy, ale nie udało mi się tego zrobić przez jedno zapytanie.

Zrobiłem to prowizorycznie, ale to mnie nie satysfakcjonuje:

  1. ...
  2. $query1 = "SELECT Player2, Name FROM Log, Player WHERE Player2=PID";
  3. $query2 = "SELECT Player1, Name FROM Log, Player WHERE Player1=PID";
  4.  
  5. $q1 = odbc_exec($conn, $query1);
  6. $q2 = odbc_exec($conn, $query2);
  7.  
  8. while($p = odbc_fetch_array($q2)){
  9. $r = odbc_fetch_array($q1);
  10. $p['Player2'] = $r['Name'];
  11. echo "...";
  12.  
  13. }
  14.  
  15. ..

Jak skonstruować zapytanie, które od razu zwróci mi te nicki?
MatBlo
Nie wiem o co Ci dokładnie chodzi, ale na Twoim miejscu przeprojektował bym bazę danych. Utworzyłbym dwie tabele: player (id_playera PK, nazwa), log (id_operacji, operacja, id_playera FK). Poza tym id_operacji umożliwi Ci przypisanie do konkretnej operacji osoby o określonym id.
  1. SELECT nazwa, operacja FROM
  2. player a INNER JOIN log b
  3. ON a.id_playera = b.id_playera
MagicianVH
Baza jest już zaprojektowana i to nie podlega żadnym modyfikacjom.
Chodzi tu o operacje pomiędzy dwoma graczami, które zapisują się w bazie a ja mam napisać narzędzie, które umożliwi łatwe i proste odczytywanie.
mortus
  1. SELECT `l`.`Operacja`, `p1`.`Name` AS `Player1`, `p2`.`Name` AS `Player2` FROM `Log` `l` LEFT JOIN `Player` `p1` ON `l`.`Player1` = `p1`.`PID` LEFT JOIN `Player` `p2` ON `l`.`PID` = `p2`.`Player2`

To tak mniej więcej. Spodziewam się tutaj sporej nadmiarowości danych, którą zniweluje np. odpowiednie grupowanie. Możesz też sprawdzić, jak zadziała tutaj RIGHT JOIN lub INNER JOIN, bo jakoś nie mam głowy do myślenia na tym upale.
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.