Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dwie kolumny
MagicianVH
post
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 31.08.2010

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


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?

Ten post edytował MagicianVH 30.04.2012, 09:29:18
Go to the top of the page
+Quote Post
MatBlo
post
Post #2





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 27.05.2010

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


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


Ten post edytował MatBlo 30.04.2012, 10:05:09
Go to the top of the page
+Quote Post
MagicianVH
post
Post #3





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 31.08.2010

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


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.

Ten post edytował MagicianVH 30.04.2012, 10:04:41
Go to the top of the page
+Quote Post
mortus
post
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


  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.
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: 17.09.2025 - 11:40