Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [MySQL][PHP]Najlepszy wynik z dwóch tabel
maniek2512
post 25.01.2013, 17:35:13
Post #1





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 5.03.2011

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


Witam ponownie, męczę się z tym cały dzień i nie mogę dojść jak to zrobić. Otóż pobieram sobie dane z bazy z 2 tabel. Potrzebuję aby z tych tabel wyświetlało mi tylko najlepsze wyniki (najkrótszy czas)

To co napisałem:

  1. <?php
  2. $trasa = $_GET['trasa'];
  3. $tryb = $_GET['tryb'];
  4. $shard = $_GET['shard'];
  5.  
  6.  
  7.  
  8. $sql_conn = mysql_connect('**********', '********_admin', '**********');
  9. mysql_select_db('nfswinfo_1');
  10.  
  11. $result = mysql_query("SELECT * FROM single$trasa");
  12.  
  13. while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
  14. printf ("ID: %s Nick: %s Marka: %s Model: %s Czas: %s", $row[0], $row["nick"], $row["marka"], $row["model"], $row["czas"]);
  15. }
  16.  
  17.  
  18.  
  19.  
  20. $result1 = mysql_query("SELECT * FROM multi$trasa");
  21.  
  22. while ($row = mysql_fetch_array($result1, MYSQL_BOTH)) {
  23. printf ("ID: %s Nick: %s Marka: %s Model: %s Czas: %s", $row[0], $row["nick"], $row["marka"], $row["model"], $row["czas"]);
  24. }
  25.  
  26.  
  27.  
  28. ?>



Wynikiem tego jest:

(single)
ID: 1 Nick: JOERG1966 Marka: MCLAREN Model: F1 Czas: 0:01:13.800
ID: 2 Nick: RYBECKI0902 Marka: PAGANI Model: ZONDA CINQUE Czas: 0:01:16.675
ID: 3 Nick: MANIEK2512PL Marka: PAGANI Model: ZONDA CINQUE Czas: 0:01:17.463

(multi)
ID: 1 Nick: JOERG1966 Marka: MCLAREN Model: F1 Czas: 0:01:09.435
ID: 2 Nick: DELECTAMENTI Marka: PAGANI Model: ZONDA CINQUE Czas: 0:01:12.861
ID: 3 Nick: MANIEK2512PL Marka: PAGANI Model: ZONDA CINQUE Czas: 0:01:19.817
ID: 4 Nick: BLACKSHADOW849 Marka: PAGANI Model: ZONDA CINQUE Czas: 0:01:21.805
ID: 5 Nick: RYBECKI0902 Marka: PAGANI Model: ZONDA CINQUE Czas: 0:01:23.075


Chciałym z tych 2 "tabel" stworzyć 1, która względem powyższych danych wyglądałaby tak:

1. Nick: JOERG1966 Marka: MCLAREN Model: F1 Czas: 0:01:09.435 Tryb: single
2. Nick: DELECTAMENTI Marka: PAGANI Model: ZONDA CINQUE Czas: 0:01:12.861 Tryb: multi
3. Nick: RYBECKI0902 Marka: PAGANI Model: ZONDA CINQUE Czas: 0:01:16.675 Tryb: single
4. Nick: MANIEK2512PL Marka: PAGANI Model: ZONDA CINQUE Czas: 0:01:17.463 Tryb: single
5. Nick: BLACKSHADOW849 Marka: PAGANI Model: ZONDA CINQUE Czas: 0:01:21.805 Tryb: multi


Mógłby mi ktoś podpowiedzieć, podać jakiś przykład jak to zrobić?

Go to the top of the page
+Quote Post
kristaps
post 25.01.2013, 17:45:22
Post #2





Grupa: Zarejestrowani
Postów: 279
Pomógł: 36
Dołączył: 1.03.2012

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


np. UNION i po problemie. Tutaj jakiś kurs. Całość załatwiasz jednym zapytaniem.

Ten post edytował kristaps 25.01.2013, 17:58:57
Go to the top of the page
+Quote Post
maniek2512
post 25.01.2013, 18:09:42
Post #3





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 5.03.2011

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


Dobra zmieniłem na coś takiego, teraz tylko jak napisać warunek aby pobierało tylko najlepszy (najkrótszy) czas z tych tabel? Do tego trzeba by było dopisać czy jest to multi czy single.


  1. $result = mysql_query("SELECT nick, marka, model, czas FROM single$trasa UNION SELECT nick, marka, model, czas FROM multi$trasa");
  2.  
  3. while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
  4. printf ("Nick: %s Marka: %s Model: %s Czas: %s", $row["nick"], $row["marka"], $row["model"], $row["czas"]);
  5. }
  6.  
Go to the top of the page
+Quote Post
kristaps
post 25.01.2013, 18:18:21
Post #4





Grupa: Zarejestrowani
Postów: 279
Pomógł: 36
Dołączył: 1.03.2012

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


Cytat(maniek2512 @ 25.01.2013, 18:09:42 ) *
teraz tylko jak napisać warunek aby pobierało tylko najlepszy (najkrótszy) czas z tych tabel?

Mówisz o 1 rekordzie? Najkrótsze ustalisz przez ORDER BY, ilość przez LIMIT.
Go to the top of the page
+Quote Post
maniek2512
post 25.01.2013, 18:25:37
Post #5





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 5.03.2011

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


Chodzi mi o to aby pobierało najkrótszy czas z tych 2 tabel dla każdego z graczy.

Np. osoba1 przejechała trasę na single z czasem 1:20 a na multi z czasem 1:18
Wynikiem czego pokaże się tylko ten lepszy czas wraz z informacją czy był to wyścig na multi czy single (opcjonalnie, choć dobrze by było)

Chciałbym aby czasy wyświetlały się dla każdej z osób. Czyli musiałoby porównać czasy z single i multi dla każdego gracza i wypisać lepszy (tj. krótszy).
Go to the top of the page
+Quote Post
kristaps
post 25.01.2013, 18:40:43
Post #6





Grupa: Zarejestrowani
Postów: 279
Pomógł: 36
Dołączył: 1.03.2012

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


Jeżeli chcesz informować z której tabeli pochodzi rekord, to będziesz musiał zrezygnować z UNION. Przynajmniej mi nie wiadomo nic nt uzyskiwania informacji o tabeli. W takim przypadku najlepiej jak wrócisz do swojego pierwotnego pomysłu, ale dane będziesz pobierał jako tablice (MYSQL_ASSOC), następnie możesz je połączyć by posegregować. No ale może ktoś zna lepszy sposób.
Go to the top of the page
+Quote Post
maniek2512
post 25.01.2013, 19:13:59
Post #7





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 5.03.2011

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


Niestety nie ogarniam jeszcze za bardzo php i mysql i nie poradzę sobie z tym, daltego też pytałem o jakieś przykłady. Większości nauczyłem się właśnie w ten sposób i często jak czegoś nie wiem korzystam z poprzednich rozwiązań. Czegoś takiego nigdy nie robiłem, a do tego ciężko znaleźć jaką kolwiek pomoc w necie na ten temat.

Zupełnie nie wiem jak z tych dwóch tablic wybrać tylko najlepszy czas dla danego gracza. Jeśli ktoś byłby tak uprzejmy i napisał rozwiązanie tego pytania (+ o ile byłaby taka możliwość z jakimś wytłumaczeniem co z czym się je, byłbym dozgonnie wdzięczny).

Będę sam próbował się jeszcze jakoś z tym uporać lecz po całym dniu prób ręce same opadają..


Jak narazie zrobiłem tyle:

  1. <table border="1" align="left" width="100%" >
  2. <!-- Table Header -->
  3. <thead>
  4.  
  5. <tr>
  6.  
  7. <th background='tlo.png'>Nick</th>
  8. <th background='tlo.png'>Czas</th>
  9. <th background='tlo.png'>Marka</th>
  10. <th background='tlo.png'>Model</th>
  11.  
  12. </tr>
  13.  
  14. </thead>
  15.  
  16. <!-- Tabel body-->
  17. <tbody>
  18.  
  19.  
  20.  
  21. <?php
  22. $trasa = $_GET['trasa'];
  23. $tryb = $_GET['tryb'];
  24. $shard = $_GET['shard'];
  25.  
  26.  
  27.  
  28. $sql_conn = mysql_connect('*******', '********_admin', '********');
  29. mysql_select_db('nfswinfo_1');
  30.  
  31. $result = mysql_query("SELECT nick, marka, model, czas FROM single$trasa UNION SELECT nick, marka, model, czas FROM multi$trasa ORDER BY `czas` ASC");
  32. $i=0;
  33. while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
  34. $data[$i]=$row;
  35. $i++;
  36.  
  37. $nick = '<td>' .$row["nick"]. '</td>';
  38. $marka = '<td>' .$row["marka"]. '</td>';
  39. $model = '<td>' .$row["model"]. '</td>';
  40. $czas = '<td>' .$row["czas"]. '</td>';
  41. echo "<tr align='center'>$nick $marka $model $czas</tr>";
  42. //printf ("Nick: %s Marka: %s Model: %s Czas: %s", $row["nick"], $row["marka"], $row["model"], $row["czas"]);
  43. }
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50. // $result1 = mysql_query("SELECT * FROM multi$trasa");
  51.  
  52. //while ($row = mysql_fetch_array($result1, MYSQL_BOTH)) {
  53. // printf ("ID: %s Nick: %s Marka: %s Model: %s Czas: %s", $row[0], $row["nick"], $row["marka"], $row["model"], $row["czas"]);
  54. //}
  55.  
  56. //mysql_free_result($result1);
  57.  
  58.  
  59. ?>
  60.  
  61.  
  62. </tbody>
  63.  
  64.  
  65. </table>



Może można tu zastosować jakoś array_unique z tym, że trzeba było ją posortować i wtedy pokazywało by tylko wyniki, które pokazały się jako pierwsze? Tylko nie wiem, czy można ustawić w array_unique, która wartość ma być unikalna. Mógłby ktoś się wypowiedzieć na ten temat?

Ten post edytował maniek2512 25.01.2013, 21:24:19
Go to the top of the page
+Quote Post
kristaps
post 25.01.2013, 21:39:01
Post #8





Grupa: Zarejestrowani
Postów: 279
Pomógł: 36
Dołączył: 1.03.2012

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


Możesz zacząć tak:

  1. $stmt1 = mysql_query("SELECT * FROM single WHERE id_gracza = 1 ORDER BY najlepszy_czas DESC");
  2. $sth1 = mysql_fetch_array($tymczasowa, MYSQL_ASSOC);
  3.  
  4. $stmt2 = mysql_query("SELECT * FROM multi WHERE id_gracza = 1 ORDER BY najlepszy_czas DESC");
  5. $sth2 = mysql_fetch_array($tymczasowa2, MYSQL_ASSOC);
  6.  
  7. // W obu przypadkach otrzymasz po jednym rekordzie. Możesz je zapisać do zmiennej i wyświetlić, tak jak pisałeś wyżej.
  8. // echo "Gracz: ".$sth2["login"].". Jego najlepszy wynik (Multiplayer): ".$sth2["najlepszy_czas"].".";
  9.  
  10. $merge = (array_merge_recursive ($sth1 , $sth2)); // Teraz łączysz obie tabele, a następnie sortujesz (array_multisort) według własnych potrzeb.


Edit: Widzę, że wrzuciłeś swoją propozycję. Zostałeś przy UNION, więc pewnie wykorzystasz kolejne zapytanie do wyświetlenia danych z multi i single. Też jakieś wyjście, ale też kolejne zapytanie.

Array_unique po prostu usuwa duplikaty podczas wyświetlania.

Ten post edytował kristaps 25.01.2013, 21:37:48
Go to the top of the page
+Quote Post
maniek2512
post 25.01.2013, 21:53:57
Post #9





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 5.03.2011

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


Cytat(kristaps @ 25.01.2013, 21:39:01 ) *
Możesz zacząć tak:

  1. $stmt1 = mysql_query("SELECT * FROM single WHERE id_gracza = 1 ORDER BY najlepszy_czas DESC");
  2. $sth1 = mysql_fetch_array($tymczasowa, MYSQL_ASSOC);
  3.  
  4. $stmt2 = mysql_query("SELECT * FROM multi WHERE id_gracza = 1 ORDER BY najlepszy_czas DESC");
  5. $sth2 = mysql_fetch_array($tymczasowa2, MYSQL_ASSOC);
  6.  
  7. // W obu przypadkach otrzymasz po jednym rekordzie. Możesz je zapisać do zmiennej i wyświetlić, tak jak pisałeś wyżej.
  8. // echo "Gracz: ".$sth2["login"].". Jego najlepszy wynik (Multiplayer): ".$sth2["najlepszy_czas"].".";
  9.  
  10. $merge = (array_merge_recursive ($sth1 , $sth2)); // Teraz łączysz obie tabele, a następnie sortujesz (array_multisort) według własnych potrzeb.


Edit: Widzę, że wrzuciłeś swoją propozycję. Zostałeś przy UNION, więc pewnie wykorzystasz kolejne zapytanie do wyświetlenia danych z multi i single. Też jakieś wyjście, ale też kolejne zapytanie.

Array_unique po prostu usuwa duplikaty podczas wyświetlania.




Nie wiem czy do końca zrozumiałeś o co mi chodzi.

Postaram się to lepiej wytłumaczyć.

W bazie danych mam aktualizowane na bierząco (Cron lub po kliknięciu aktualizuj przez użytkownika) czasy do multi i do single dla każdego gracza (jest tam po jednym czasie dla multi i dla single)

Chodzi mi tu tylko o to, że przy pobieraniu danych z bazy (wszystkich graczy) pokazują się czasy z single i z multi, a ja chciałbym aby pokazywany był tylko ten lepszy czas.

Czyli tak jak napisałem w 1 poście:


tabela 1- (single)
ID: 1 Nick: JOERG1966 Marka: MCLAREN Model: F1 Czas: 0:01:13.800
ID: 2 Nick: RYBECKI0902 Marka: PAGANI Model: ZONDA CINQUE Czas: 0:01:16.675
ID: 3 Nick: MANIEK2512PL Marka: PAGANI Model: ZONDA CINQUE Czas: 0:01:17.463

tabela 2- (multi)
ID: 1 Nick: JOERG1966 Marka: MCLAREN Model: F1 Czas: 0:01:09.435
ID: 2 Nick: DELECTAMENTI Marka: PAGANI Model: ZONDA CINQUE Czas: 0:01:12.861
ID: 3 Nick: MANIEK2512PL Marka: PAGANI Model: ZONDA CINQUE Czas: 0:01:19.817
ID: 4 Nick: BLACKSHADOW849 Marka: PAGANI Model: ZONDA CINQUE Czas: 0:01:21.805
ID: 5 Nick: RYBECKI0902 Marka: PAGANI Model: ZONDA CINQUE Czas: 0:01:23.075


Chciałym z tych 2 "tabel" stworzyć 1, która względem powyższych danych wyglądałaby tak:

tabela 3-razem
1. Nick: JOERG1966 Marka: MCLAREN Model: F1 Czas: 0:01:09.435 Tryb: single
2. Nick: DELECTAMENTI Marka: PAGANI Model: ZONDA CINQUE Czas: 0:01:12.861 Tryb: multi
3. Nick: RYBECKI0902 Marka: PAGANI Model: ZONDA CINQUE Czas: 0:01:16.675 Tryb: single
4. Nick: MANIEK2512PL Marka: PAGANI Model: ZONDA CINQUE Czas: 0:01:17.463 Tryb: single
5. Nick: BLACKSHADOW849 Marka: PAGANI Model: ZONDA CINQUE Czas: 0:01:21.805 Tryb: multi


Co do trybu pomyślałem, że dodam po prostu nowy rekord w którym będzie informacja czy czas jest z trybu single czy z trybu multi, a następie zostanie wyświetlona obok razem z pozostałymi danymi, więc to już najmniejszy problem.


Aby było jeszcze jaśniej, obecnie po pobraniu i posortowaniu danych z bazy wyświetla mi się taka tabelka:





Chciałbym aby wyświetlała się taka jak tabelka 3-razem (wyżej)

Ten post edytował maniek2512 25.01.2013, 21:58:16
Go to the top of the page
+Quote Post
kristaps
post 25.01.2013, 22:20:48
Post #10





Grupa: Zarejestrowani
Postów: 279
Pomógł: 36
Dołączył: 1.03.2012

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


Teraz już rozumiem.

1. Nie rób tabeli, kolumny, rekordu czy czegokolwiek, by rozróżniać nazwę tabeli. To zła praktyka.
2. Najłatwiej to zrobić nadal przez 2 pytania.

Następnie:

  1. $wynik = '';
  2.  
  3. //pętla
  4.  
  5. if ($row2['czas'] > $row1['czas']){
  6.  
  7. // Tabela Multiplayer.
  8.  
  9. $wynik = '<tr><td>Nick:</td><td>'.$row2['login'].'</td><td>Marka:</td><td>'.$row2['marka'].'</td><td>Czas</td><td>'.$row2['czas'].'</td></tr>';
  10.  
  11. }
  12.  
  13. else{
  14.  
  15. // Tabela Singleplayer.
  16.  
  17. $wynik = '<tr><td>Nick:</td><td>'.$row1['login'].'</td><td>Marka:</td><td>'.$row1['marka'].'</td><td>Czas</td><td>'.$row1['czas'].'</td></tr>';
  18.  
  19. }
  20.  
  21. // koniec pętli
  22. echo '<table>';
  23. echo $wynik;
  24. echo '</table>';



Tabelę dostosuj do własnych potrzeb.

Ten post edytował kristaps 25.01.2013, 22:21:18
Go to the top of the page
+Quote Post
maniek2512
post 25.01.2013, 22:47:22
Post #11





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 5.03.2011

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


Nie wiem, chyba coś pochrzaniłem.. ;|
Pokazuje mi tylko jeden rekord, a mianowicie: Nick: RYBECKI0902 Marka: PAGANI Czas 0:01:23.075

  1.  
  2.  
  3. <?php
  4. $trasa = $_GET['trasa'];
  5. $tryb = $_GET['tryb'];
  6. $shard = $_GET['shard'];
  7. $wynik = '';
  8.  
  9.  
  10. $sql_conn = mysql_connect('**********', '**********_admin', '*********');
  11. mysql_select_db('nfswinfo_1');
  12.  
  13. $result = mysql_query("SELECT * FROM single$trasa");
  14.  
  15. while ($row2 = mysql_fetch_array($result, MYSQL_ASSOC))
  16.  
  17. $result1 = mysql_query("SELECT * FROM multi$trasa");
  18.  
  19. while ($row1 = mysql_fetch_array($result1, MYSQL_ASSOC))
  20.  
  21.  
  22.  
  23.  
  24.  
  25. //pętla
  26.  
  27. if ($row2["czas"] > $row1["czas"]){
  28.  
  29. // Tabela Multiplayer.
  30.  
  31. $wynik = '<tr><td>Nick:</td><td>'.$row2["nick"].'</td><td>Marka:</td><td>'.$row2["marka"].'</td><td>Czas</td><td>'.$row2["czas"].'</td></tr>';
  32.  
  33. }
  34.  
  35. else{
  36.  
  37. // Tabela Singleplayer.
  38.  
  39. $wynik = '<tr><td>Nick:</td><td>'.$row1["nick"].'</td><td>Marka:</td><td>'.$row1["marka"].'</td><td>Czas</td><td>'.$row1["czas"].'</td></tr>';
  40.  
  41. }
  42.  
  43. // koniec pętli
  44. echo '<table>';
  45. echo $wynik;
  46. echo '</table>';
  47.  
  48. ?>
Go to the top of the page
+Quote Post
kristaps
post 25.01.2013, 23:10:03
Post #12





Grupa: Zarejestrowani
Postów: 279
Pomógł: 36
Dołączył: 1.03.2012

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


Bo nie wrzuciłeś tego w żadną pętlę. Dlatego zapytanie wykonane zostało tylko raz. Ok, założyłem, że masz tabelę z graczami:

  1. <?php
  2.  
  3. $trasa = $_GET['trasa'];
  4. $tryb = $_GET['tryb'];
  5. $shard = $_GET['shard'];
  6.  
  7. $sql_conn = mysql_connect('**********', '**********_admin', '*********');
  8. mysql_select_db('nfswinfo_1');
  9.  
  10. $result = mysql_query("SELECT id FROM gracze");
  11. $wynik = '';
  12. while ($row2 = mysql_fetch_array($result, MYSQL_ASSOC)){
  13.  
  14. $user = $row["id"];
  15.  
  16. $result = mysql_query("SELECT * FROM single$trasa WHERE login = $user ORDER BY czas");
  17. $row2 = mysql_fetch_array($result, MYSQL_ASSOC);
  18.  
  19. $result1 = mysql_query("SELECT * FROM multi$trasa WHERE login = $user ORDER BY czas");
  20. $row1 = mysql_fetch_array($result1, MYSQL_ASSOC);
  21.  
  22.  
  23. if ($row2["czas"] > $row1["czas"]){
  24. // Tabela Multiplayer.
  25. $wynik = "<tr><td>Nick:</td><td>".$row2["login"]."</td><td>Marka:</td><td>".$row2["marka"]."</td><td>Czas</td><td>".$row2["czas"]."</td></tr>";
  26. }
  27.  
  28. else{
  29. // Tabela Singleplayer.
  30. $wynik = "<tr><td>Nick:</td><td>".$row1["login"]."</td><td>Marka:</td><td>".$row1["marka"]."</td><td>Czas</td><td>".$row1["czas"]."</td></tr>";
  31. }
  32. }
  33.  
  34.  
  35.  
  36.  
  37. echo "<table>";
  38. echo $wynik;
  39. echo "</table>";
  40. ?>


Pętla wykona się tyle razy, ile masz użytkowników w bazie. Równie dobrze możesz dać tam pętlę for, czy inną.

Ten post edytował kristaps 25.01.2013, 23:04:35
Go to the top of the page
+Quote Post
maniek2512
post 25.01.2013, 23:30:47
Post #13





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 5.03.2011

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


W bazie danych mam nazwy tras w nich mam rekordy, np:

multi39:

id
nick
marka
model
czas
ban

Z tej bazy pobierane są wszystkie dane potrzebne do wyświetlenia czasów łącznie z nickiem gracza.


edit:///

Zrobiłem coś takiego:

  1. mysql_select_db('nfswinfo_1');
  2.  
  3. $result = mysql_query("SELECT * FROM single$trasa");
  4.  
  5. while ($row2 = mysql_fetch_array($result, MYSQL_ASSOC)){
  6. $czas2 = $row2["czas"];
  7. $nick2 = $row2["nick"];
  8. $marka2 = $row2["marka"];
  9.  
  10.  
  11.  
  12. }
  13.  
  14. $result1 = mysql_query("SELECT * FROM multi$trasa");
  15.  
  16. while ($row1 = mysql_fetch_array($result1, MYSQL_ASSOC)){
  17.  
  18. $czas1 = $row1["czas"];
  19. $nick1 = $row1["nick"];
  20. $marka1 = $row1["marka"];
  21.  
  22. if ($czas1 > $czas2){
  23.  
  24. // Tabela Multiplayer.
  25.  
  26. $wynik = '<tr><td>Nick:</td><td>'.$nick2.'</td><td>Marka:</td><td>'.$marka2.'</td><td>Czas</td><td>'.$czas2.'</td></tr>';
  27.  
  28. }
  29.  
  30. else{
  31.  
  32. // Tabela Singleplayer.
  33.  
  34. $wynik = '<tr><td>Nick:</td><td>'.$nick1.'</td><td>Marka:</td><td>'.$marka1.'</td><td>Czas</td><td>'.$czas1.'</td></tr>';
  35.  
  36. }
  37.  
  38. // koniec pętli
  39. echo '<table>';
  40. echo $wynik;
  41. echo '</table>';
  42.  
  43. }


lecz nie wiedzieć czemu zwraca to taki wynik:

Nick: JOERG1966 Marka: MCLAREN Czas 0:01:09.435
Nick: DELECTAMENTI Marka: PAGANI Czas 0:01:12.861
Nick: MANIEK2512PL Marka: PAGANI Czas 0:01:17.463
Nick: MANIEK2512PL Marka: PAGANI Czas 0:01:17.463
Nick: MANIEK2512PL Marka: PAGANI Czas 0:01:17.463



Ten post edytował maniek2512 26.01.2013, 03:17:32
Go to the top of the page
+Quote Post
kristaps
post 26.01.2013, 03:55:28
Post #14





Grupa: Zarejestrowani
Postów: 279
Pomógł: 36
Dołączył: 1.03.2012

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


Dzieje się tak pewnie z powodu braku jakiekolwiek warunku w zapytaniu. Sprawdź taki kod:

  1. <?php
  2.  
  3. $trasa = $_GET['trasa'];
  4. $tryb = $_GET['tryb'];
  5. $shard = $_GET['shard'];
  6.  
  7. $sql_conn = mysql_connect('**********', '**********_admin', '*********');
  8. mysql_select_db('nfswinfo_1');
  9.  
  10. $result = mysql_query("SELECT id FROM multi$trasa");
  11. $wynik = '';
  12. while ($row2 = mysql_fetch_array($result, MYSQL_ASSOC)){
  13.  
  14. $user = $row["id"];
  15.  
  16. $result = mysql_query("SELECT * FROM single$trasa WHERE id = $user ORDER BY czas DESC");
  17. $row2 = mysql_fetch_array($result, MYSQL_ASSOC);
  18.  
  19. $result1 = mysql_query("SELECT * FROM multi$trasa WHERE id = $user ORDER BY czas DESC");
  20. $row1 = mysql_fetch_array($result1, MYSQL_ASSOC);
  21.  
  22.  
  23. if ($row2["czas"] > $row1["czas"]){
  24. // Tabela Multiplayer.
  25. $wynik = "<tr><td>Nick:</td><td>".$row2["login"]."</td><td>Marka:</td><td>".$row2["marka"]."</td><td>Czas</td><td>".$row2["czas"]."</td></tr>";
  26. }
  27.  
  28. else{
  29. // Tabela Singleplayer.
  30. $wynik = "<tr><td>Nick:</td><td>".$row1["login"]."</td><td>Marka:</td><td>".$row1["marka"]."</td><td>Czas</td><td>".$row1["czas"]."</td></tr>";
  31. }
  32. }
  33.  
  34.  
  35.  
  36.  
  37. echo "<table>";
  38. echo $wynik;
  39. echo "</table>";
  40. ?>


Tylko nie usuwaj warunków i wklej co otrzymałeś.

Ten post edytował kristaps 26.01.2013, 04:08:35
Go to the top of the page
+Quote Post
maniek2512
post 26.01.2013, 12:50:54
Post #15





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 5.03.2011

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


Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/nfswinfo/public_html/reszta/staty/staty.php on line 17

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/nfswinfo/public_html/reszta/staty/staty.php on line 20

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/nfswinfo/public_html/reszta/staty/staty.php on line 12
Nick: Marka: Czas

  1. while ($row2 = mysql_fetch_array($result, MYSQL_ASSOC)){
  2.  
  3. $user = $row["id"];
  4.  
  5. $result = mysql_query("SELECT * FROM single$trasa WHERE id = $user ORDER BY czas DESC");
  6. $row2 = mysql_fetch_array($result, MYSQL_ASSOC);
  7.  
  8. $result1 = mysql_query("SELECT * FROM multi$trasa WHERE id = $user ORDER BY czas DESC");
  9. $row1 = mysql_fetch_array($result1, MYSQL_ASSOC);




Zrobiłem więc tabelę, w której dodałem wszystkie nicki i zmieniłem na to:

  1. $trasa = $_GET['trasa'];
  2. $tryb = $_GET['tryb'];
  3. $shard = $_GET['shard'];
  4.  
  5. $sql_conn = mysql_connect('*********', '*********_admin', '***********');
  6. mysql_select_db('nfswinfo_1');
  7.  
  8. $result3 = mysql_query("SELECT nick FROM CHICANE")or die('Zapytanie: '.$sql.' --- błąd: '.mysql_error());
  9. $wynik = '';
  10. while ($row3 = mysql_fetch_array($result3, MYSQL_ASSOC)){
  11.  
  12. $user = $row3["nick"];
  13.  
  14. echo $user;
  15.  
  16. $result = mysql_query("SELECT * FROM single$trasa WHERE nick='$user' ORDER BY czas DESC")or die('Zapytanie: '.$sql.' --- błąd: '.mysql_error());
  17. $row2 = mysql_fetch_array($result, MYSQL_ASSOC);
  18.  
  19. $result1 = mysql_query("SELECT * FROM multi$trasa WHERE nick='$user' ORDER BY czas DESC")or die('Zapytanie: '.$sql.' --- błąd: '.mysql_error());
  20. $row1 = mysql_fetch_array($result1, MYSQL_ASSOC);
  21.  
  22.  
  23. if ($row2["czas"] > $row1["czas"]){
  24. // Tabela Multiplayer.
  25. $wynik = "<tr><td>Nick:</td><td>".$row2["nick"]."</td><td>Marka:</td><td>".$row2["marka"]."</td><td>Czas</td><td>".$row2["czas"]."</td></tr>";
  26. }
  27.  
  28. else{
  29. // Tabela Singleplayer.
  30. $wynik = "<tr><td>Nick:</td><td>".$row1["nick"]."</td><td>Marka:</td><td>".$row1["marka"]."</td><td>Czas</td><td>".$row1["czas"]."</td></tr>";
  31. }
  32. }
  33.  
  34.  
  35.  
  36.  
  37. echo "<table>";
  38. echo $wynik;
  39. echo "</table>";


Muszę to robić po nicku ponieważ id jest inne w single i multi (dane do mazy wysyłane są w względem miejsca np. osoba która była 1 na wyścigu ma id 1, czyli jeśli na jednym wyścigu w trybie single osoba1 jest 1, a w trybie multi jest 2 ma dwa różne id, a więc zamiast id musiałem dać po nicku)


Niestety pokazuje tylko jeden wynik (dla ostatniej osoby z tabeli- CHICANE)

Nick: BLACKSHADOW849 Marka: PAGANI Czas 0:01:21.805

Czyli znów coś z pętlą jest nie tak.



edit:// Zrobiłem tak, teraz powtarza mi się tylko jeden z rekordów oraz nie wyświetla mi się czas gracza BLACKSHADOW849:
(Może tak być dlatego, że nie każdy jeździł tryb multi i nie każdy jeździł tryb single ? )

Nick: MANIEK2512PL Marka: PAGANI Czas 0:01:17.463
Nick: JOERG1966 Marka: MCLAREN Czas 0:01:09.435
Nick: RYBECKI0902 Marka: PAGANI Czas 0:01:16.675
Nick: DELECTAMENTI Marka: PAGANI Czas 0:01:12.861
Nick: RYBECKI0902 Marka: PAGANI Czas 0:01:16.675

  1.  
  2. $result3 = mysql_query("SELECT nick FROM CHICANE");
  3. $wynik = '';
  4. while ($row3 = mysql_fetch_array($result3, MYSQL_ASSOC)){
  5.  
  6. $user = $row3["nick"];
  7.  
  8.  
  9.  
  10. $result = mysql_query("SELECT * FROM single$trasa WHERE nick='$user' ORDER BY czas ASC");
  11.  
  12. while ($row2 = mysql_fetch_array($result, MYSQL_ASSOC)){
  13. $czas2 = $row2["czas"];
  14. $nick2 = $row2["nick"];
  15. $marka2 = $row2["marka"];
  16.  
  17.  
  18.  
  19. }
  20.  
  21. $result1 = mysql_query("SELECT * FROM multi$trasa WHERE nick='$user' ORDER BY czas ASC");
  22.  
  23. while ($row1 = mysql_fetch_array($result1, MYSQL_ASSOC)){
  24.  
  25. $czas1 = $row1["czas"];
  26. $nick1 = $row1["nick"];
  27. $marka1 = $row1["marka"];
  28.  
  29. if ($czas1 > $czas2){
  30.  
  31. // Tabela Multiplayer.
  32.  
  33. $wynik = '<tr><td>Nick:</td><td>'.$nick2.'</td><td>Marka:</td><td>'.$marka2.'</td><td>Czas</td><td>'.$czas2.'</td></tr>';
  34.  
  35. }
  36.  
  37. else{
  38.  
  39. // Tabela Singleplayer.
  40.  
  41. $wynik = '<tr><td>Nick:</td><td>'.$nick1.'</td><td>Marka:</td><td>'.$marka1.'</td><td>Czas</td><td>'.$czas1.'</td></tr>';
  42.  
  43. }
  44.  
  45. // koniec pętli
  46. echo '<table>';
  47. echo $wynik;
  48. echo '</table>';
  49.  
  50. }}


Ten post edytował maniek2512 26.01.2013, 13:09:10
Go to the top of the page
+Quote Post
kristaps
post 26.01.2013, 13:10:45
Post #16





Grupa: Zarejestrowani
Postów: 279
Pomógł: 36
Dołączył: 1.03.2012

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


Zmień

$wynik = '<tr><td>Nick ...

na

$wynik .= '<tr><td>Nick ...

W obu warunkach.

Ten post edytował kristaps 26.01.2013, 13:13:09
Go to the top of the page
+Quote Post
maniek2512
post 26.01.2013, 13:16:13
Post #17





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 5.03.2011

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


Po zmianie na
  1. $wynik .= '


mam coś takiego:

Nick: MANIEK2512PL Marka: PAGANI Czas 0:01:17.463
Nick: MANIEK2512PL Marka: PAGANI Czas 0:01:17.463
Nick: JOERG1966 Marka: MCLAREN Czas 0:01:09.435
Nick: MANIEK2512PL Marka: PAGANI Czas 0:01:17.463
Nick: JOERG1966 Marka: MCLAREN Czas 0:01:09.435
Nick: RYBECKI0902 Marka: PAGANI Czas 0:01:16.675
Nick: MANIEK2512PL Marka: PAGANI Czas 0:01:17.463
Nick: JOERG1966 Marka: MCLAREN Czas 0:01:09.435
Nick: RYBECKI0902 Marka: PAGANI Czas 0:01:16.675
Nick: DELECTAMENTI Marka: PAGANI Czas 0:01:12.861
Nick: MANIEK2512PL Marka: PAGANI Czas 0:01:17.463
Nick: JOERG1966 Marka: MCLAREN Czas 0:01:09.435
Nick: RYBECKI0902 Marka: PAGANI Czas 0:01:16.675
Nick: DELECTAMENTI Marka: PAGANI Czas 0:01:12.861
Nick: RYBECKI0902 Marka: PAGANI Czas 0:01:16.675
Go to the top of the page
+Quote Post
kristaps
post 26.01.2013, 13:22:01
Post #18





Grupa: Zarejestrowani
Postów: 279
Pomógł: 36
Dołączył: 1.03.2012

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


  1. $result3 = mysql_query("SELECT nick FROM CHICANE");


To zapytanie nie zwraca duplikatów? Trochę to dziwne, docelowo powinieneś pobrać użytkownika, następnie dane i porównać w warunku if. Czy mniejszy czy większy - dopisać do tabeli. Kropka.
Go to the top of the page
+Quote Post
maniek2512
post 26.01.2013, 13:24:13
Post #19





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 5.03.2011

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


Cytat(kristaps @ 26.01.2013, 13:22:01 ) *
  1. $result3 = mysql_query("SELECT nick FROM CHICANE");


To zapytanie nie zwraca duplikatów? Trochę to dziwne, docelowo powinieneś pobrać użytkownika, następnie dane i porównać w warunku if. Czy mniejszy czy większy - dopisać do tabeli. Kropka.



To zapytanie zwraca dokładnie coś takiego:

MANIEK2512PL
JOERG1966
RYBECKI0902
DELECTAMENTI
BLACKSHADOW849
Go to the top of the page
+Quote Post
kristaps
post 26.01.2013, 13:29:24
Post #20





Grupa: Zarejestrowani
Postów: 279
Pomógł: 36
Dołączył: 1.03.2012

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


Problem pewnie polega na tym, że nie każdy rozgrywał single i multi.

  1. if ($czas1 > $czas2){
  2.  
  3. // Tabela Multiplayer.
  4.  
  5. $wynik = '<tr><td>Nick:</td><td>'.$nick2.'</td><td>Marka:</td><td>'.$marka2.'</td><td>Czas</td><td>'.$czas2.'</td></tr>';
  6.  
  7. }
  8.  
  9. elseif ($czas1 < $czas2){
  10.  
  11. // Tabela Singleplayer.
  12.  
  13. $wynik = '<tr><td>Nick:</td><td>'.$nick1.'</td><td>Marka:</td><td>'.$marka1.'</td><td>Czas</td><td>'.$czas1.'</td></tr>';
  14.  
  15. }
  16.  
  17. else { echo "Brak któregoś z czasów"; }


Co teraz Ci się wyświetli?
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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 Wersja Lo-Fi Aktualny czas: 16.06.2024 - 15:18