Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Sortowanie wyników
diamondking
post 18.09.2019, 09:48:53
Post #1





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 7.02.2014

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


Hej wink.gif
Jestem przedszkolakiem i potrzebuję nakierowania jak mogę rozwiązać swój problem smile.gif

W bazie danych mam tabele:

• Gracze (tam jest login, id i inne pola typu siła, szybkośc itp)
• Turniej (tu przechowuję tylko id graczy, którzy zgłosili się do turnieju).

Chcę by raz dziennie (to zrobię zadaniem cron) pobierało mi najpierw wszytskie ID graczy z tabeli turniej,
następnie np. pobierało siłę i szybkość danego gracza z tabeli gracze - mnożyło to (siła * szybkość)
i finalnie sortowało wyniki od najwyższego do najniższego.

Nakierujecie mnie jak mogę to rozwiązać ?
Powód edycji: [nospor]:
Go to the top of the page
+Quote Post
poli25
post 18.09.2019, 10:08:00
Post #2





Grupa: Zarejestrowani
Postów: 237
Pomógł: 20
Dołączył: 19.02.2010

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


  1. SELECT a.id_gracza,(SELECT (b.sila * b.szybkosc) FROM turniej b WHERE b.id_gracza=a.id_gracza) FROM gracze a ORDER BY 2


Ten post edytował poli25 18.09.2019, 10:09:20
Go to the top of the page
+Quote Post
Tomplus
post 18.09.2019, 10:15:39
Post #3





Grupa: Zarejestrowani
Postów: 1 489
Pomógł: 178
Dołączył: 20.03.2005
Skąd: Będzin

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


Coś takiego?
  1. SELECT (G.sila* G.szybkosc) iloczyn FROM turniej T INNER JOIN gracze G ON G.id = T.graczId ORDER BY iloczyn DESC;
Go to the top of the page
+Quote Post
Neutral
post 18.09.2019, 10:26:38
Post #4





Grupa: Zarejestrowani
Postów: 252
Pomógł: 38
Dołączył: 10.01.2016

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


Nie wiem jak miałoby to działać, ale może lepiej byłoby gdybyś napisał event scheduler po stronie bazy danych.

  1. SELECT * FROM magazine;


Kod
+--------+-----------+------------+---------+------+
| index1 | magazine1 | date1      | changed | sum1 |
+--------+-----------+------------+---------+------+
|    101 |         1 | 2019-09-12 |      20 |   20 |
|    102 |         1 | 2019-09-13 |      50 |   50 |
|    102 |         2 | 2019-09-14 |     -20 |  -20 |
|    101 |         2 | 2019-09-15 |      -5 |   -5 |
|    102 |         2 | 2019-09-16 |      -5 |  -25 |
|    101 |         1 | 2019-09-17 |      30 |   50 |
|    102 |         1 | 2019-09-18 |     -10 |   40 |
|    101 |         1 | 2019-09-19 |     100 |  150 |
+--------+-----------+------------+---------+------+


  1. SELECT * FROM skills;


Kod
+-----------+-------------+
| id_animal | name_animal |
+-----------+-------------+
|         1 | cat         |
|         2 | sparrow     |
|         4 | crane       |
|         1 | dog         |
|         4 | hawk        |
+-----------+-------------+


  1. SELECT skills.id_animal,magazine.changed,magazine.sum1,(magazine.changed*magazine.sum1) AS mult1 FROM skills,magazine ORDER BY skills.id_animal ASC;


Kod
+-----------+---------+------+-------+
| id_animal | changed | sum1 | mult1 |
+-----------+---------+------+-------+
|         1 |     -20 |  -20 |   400 |
|         1 |      -5 |  -25 |   125 |
|         1 |     -10 |   40 |  -400 |
|         1 |      50 |   50 |  2500 |
|         1 |      -5 |   -5 |    25 |
|         1 |      30 |   50 |  1500 |
|         1 |     100 |  150 | 15000 |
|         1 |      20 |   20 |   400 |
|         1 |     -20 |  -20 |   400 |
|         1 |      -5 |  -25 |   125 |
|         1 |     -10 |   40 |  -400 |
|         1 |      50 |   50 |  2500 |
|         1 |      -5 |   -5 |    25 |
|         1 |      30 |   50 |  1500 |
|         1 |      20 |   20 |   400 |
|         1 |     100 |  150 | 15000 |
|         2 |     100 |  150 | 15000 |
|         2 |     -20 |  -20 |   400 |
|         2 |     -10 |   40 |  -400 |
|         2 |      50 |   50 |  2500 |
|         2 |      30 |   50 |  1500 |
|         2 |      20 |   20 |   400 |
|         2 |      -5 |  -25 |   125 |
|         2 |      -5 |   -5 |    25 |
|         4 |      30 |   50 |  1500 |
|         4 |      20 |   20 |   400 |
|         4 |      -5 |   -5 |    25 |
|         4 |      -5 |  -25 |   125 |
|         4 |     100 |  150 | 15000 |
|         4 |     -20 |  -20 |   400 |
|         4 |      -5 |   -5 |    25 |
|         4 |     -10 |   40 |  -400 |
|         4 |      50 |   50 |  2500 |
|         4 |     100 |  150 | 15000 |
|         4 |     -20 |  -20 |   400 |
|         4 |      30 |   50 |  1500 |
|         4 |      20 |   20 |   400 |
|         4 |     -10 |   40 |  -400 |
|         4 |      50 |   50 |  2500 |
|         4 |      -5 |  -25 |   125 |
+-----------+---------+------+-------+


  1. delimiter //

  1. CREATE event once_day ON schedule every 1 day do
  2. REPLACE INTO to_schedule (SELECT skills.id_animal,magazine.changed,magazine.sum1,(magazine.changed*magazine.sum1) AS mult1 FROM skills,magazine ORDER BY skills.id_animal ASC);//

  1. delimiter ;


Żeby sprawdzić, czy masz eventa w bazie danych możesz napisać tak.

  1. SHOW events\G


Ten post edytował Neutral 18.09.2019, 10:31:38
Go to the top of the page
+Quote Post
diamondking
post 18.09.2019, 11:28:53
Post #5





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 7.02.2014

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


Cytat(Tomplus @ 18.09.2019, 11:15:39 ) *
Coś takiego?
  1. SELECT (G.sila* G.szybkosc) iloczyn FROM turniej T INNER JOIN gracze G ON G.id = T.graczId ORDER BY iloczyn DESC;


Wolę te rozwiązanie - w zupełności mi wystarcza.

Teraz pojawił się kłopot z wyświetlaniem wyników

  1. $pobierzturniej = $db -> Execute("SELECT (G.sila+ G.szybkosc) iloczyn FROM turniej T INNER JOIN players G ON G.id = T.player ORDER BY iloczyn DESC");
  2.  
  3. foreach ($pobierzturniej as $row)
  4. {
  5. echo $row['T.player']."-".$row["iloczyn"]."<br>";
  6. }


Iloczyn segreguje ok - ale nie wyśweitla mi ID gracza sad.gif

EDIT:

Poradziłem sobie!
Dziękuję za pomoc!

  1. $pobierzturniej = $db -> Execute("SELECT (G.sila+ G.szybkosc) iloczyn, G.id playerid FROM turniej T INNER JOIN players G ON G.id = T.player ORDER BY iloczyn DESC");


A czy ktoś mi pomoże jak zrobić warunek, jeżeli nie pobrało żadnego rekordu by wyświetlić "Brak" ?

  1. $pobierzturniej = $db -> Execute("SELECT (G.sila + G.szybkosc) iloczyn, G.id playerid, G.user playerlogin FROM turniej T INNER JOIN players G ON G.id = T.player ORDER BY iloczyn DESC");
  2. if (count($pobierzturniej) > 0)
  3. {
  4. foreach ($pobierzturniej as $row)
  5. {
  6. echo $row['playerlogin']."-".$row["iloczyn"]."<br>";
  7. }
  8. }else {
  9. echo "Brak";
  10.  
  11. }


Tak niestety nie działa ;/

Poradziłem sobie smile.gif

Ten post edytował diamondking 18.09.2019, 11:06:15
Go to the top of the page
+Quote Post
Tomplus
post 18.09.2019, 12:55:19
Post #6





Grupa: Zarejestrowani
Postów: 1 489
Pomógł: 178
Dołączył: 20.03.2005
Skąd: Będzin

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


Oczywiście że nie będzie Ci wyświetlać ID.
Większość odpowiedzi mają pokazać schemat działania, a nie pełne rozwiązanie.

Dobrze że poradziłeś sobie i przemyślaleś jak działa zapytanie.
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 Wersja Lo-Fi Aktualny czas: 23.10.2019 - 04:02