Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]złe przypisywanie punktów
damian238
post
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 3.11.2013

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


cześć,
mam coś takiego:
  1. $players_list = query('SELECT players.*, zawody.id as conID FROM zawody
  2. INNER JOIN players on players.id=user_id ORDER BY bieg DESC LIMIT 30', null, 'fetch_all');
  3.  
  4. $points = 50;
  5. foreach($players_list['fetch'] as $player)
  6. {
  7. query('UPDATE zawody SET punkty='.$points.' WHERE id=?', array($player['conID']));
  8.  
  9. $points--;
  10. }

a gdy sb to wykonam to mi do każdego gracza przypisuje jakąś liczbę punktów z tą różnicą tylko,
że nie w kolejności od najlepszego do najgorszego, a jakoś tak chaotycznie, bez żadnej reguły
Proszę o pomoc smile.gif
Go to the top of the page
+Quote Post
timon27
post
Post #2





Grupa: Zarejestrowani
Postów: 578
Pomógł: 69
Dołączył: 15.04.2007
Skąd: Wrocław

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


Co zawiera kolumna 'bieg' po której sortujesz?
Jakiego jest typu?

Przykład:
Jeśli zawiera czas przebiegnięcia w formacie tekstowym, to może być sortowane leksykograficznie:
1,10,11,2,222,23,242,3,34...

Ten post edytował timon27 1.12.2013, 14:58:01
Go to the top of the page
+Quote Post
damian238
post
Post #3





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 3.11.2013

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


kolumna bieg:
`bieg` decimal(4,2) NOT NULL,
Go to the top of the page
+Quote Post
Damonsson
post
Post #4





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


1.
  1. $players_list = query('SELECT players.*, zawody.id as conID FROM zawody
  2.  
  3. INNER JOIN players on players.id=user_id ORDER BY bieg DESC LIMIT 30', null, 'fetch_all');
  4.  
  5. echo '<pre>';
  6.  
  7. var_dump($players_list);
  8.  


1 ---> Jeśli wyświetlone są w kolejności przejdź do 1a

1----> Jeśli nie są wyświetlone w kolejności, masz błędnie skonstruowane zapytanie SQL, pokaż wynik 1.

1a

  1. $players_list = query('SELECT players.*, zawody.id as conID FROM zawody
  2.  
  3. INNER JOIN players on players.id=user_id ORDER BY bieg DESC LIMIT 30', null, 'fetch_all');
  4.  
  5. $points = 50;
  6.  
  7. foreach($players_list['fetch'] as $player)
  8.  
  9. {
  10. echo 'Punktów: ' . $points . ' - Dla: ' . $player['conID'] ' użytkownika';
  11. echo '<br />'
  12.  
  13. $points--;
  14.  
  15. }


1a ----> Pokaż wynik 1a

Ten post edytował Damonsson 1.12.2013, 16:25:45
Go to the top of the page
+Quote Post
damian238
post
Post #5





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 3.11.2013

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


po wpisaniu 1 wyskakuje lista graczy i pokazuje wszystkie ich dane takie jak id, login, hasło itd.
a po wpisaniu 1.a:
  1. Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ',' or ';' in /virtual/s/k/adresstrony.pl/files/cron_bieg.php on line 25

i nic się nie zmienia nadal sad.gif

nie wiem czy coś to da, ale w tym cronie jeszcze mam na początku:
  1. include('../includes/config.php');
  2.  
  3. $roznica = 5407;
  4.  
  5. $players_list = query('SELECT players.*, zawody.id as conID FROM zawody
  6. INNER JOIN players on players.id=user_id ORDER BY time ASC', null, 'fetch_all');
  7. foreach($players_list['fetch'] as $player)
  8. {
  9. $n++;
  10. $bieg = biegnij($player['skill_szybkosc'], $player['skill_technika'], $player['skill_kondycja']);
  11. query('UPDATE zawody SET bieg='.$roznica.'-'.$bieg.' WHERE id=?', array($player['conID']));
  12.  
  13. }
Go to the top of the page
+Quote Post
Damonsson
post
Post #6





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


Przeczytaj jeszcze raz mój poprzedni post, jeśli przeczytasz dokładnie i nadal będziesz musiał wykonać punkt 1a, to popraw błąd, który zrobiłem. Błąd jest najprostszym możliwym błędem w języku PHP, jeśli nie będziesz w stanie go naprawić, nie masz co pisać dalej.
Go to the top of the page
+Quote Post
damian238
post
Post #7





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 3.11.2013

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


dobra, coraz bardziej ogarniam smile.gif
poprawiłem błąd i zrobiłem tak:
w bazie mam takie rubryki:
  1. id user_id time bieg punkty
  2. 1 5 1385480672 2458.78 50
  3. 2 6 1385480690 2518.34 49
  4. 3 7 1385480712 2488.56 48
  5. 4 8 1385480730 2726.8 47
  6. 5 9 1385480750 2518.34 46
  7. 7 4 1385816738 2607.68 45

jeśli sb zrobię punktowanie według time:
  1. $players_list = query('SELECT players.*, zawody.id as conID FROM zawody
  2. INNER JOIN players on players.id=user_id
  3. ORDER BY time ASC', null, 'fetch_all');
  4.  
  5. $points = 50;
  6. foreach($players_list['fetch'] as $player)
  7. {
  8. echo 'Punktów: '.$points.' - Dla: '.$player['conID'].' użytkownika';
  9. echo '<br />' ;
  10.  
  11. $points--;}

to mam wtedy:
  1. Punktów: 50 - Dla: 1 użytkownika
  2. Punktów: 49 - Dla: 2 użytkownika
  3. Punktów: 48 - Dla: 3 użytkownika
  4. Punktów: 47 - Dla: 4 użytkownika
  5. Punktów: 46 - Dla: 5 użytkownika
  6. Punktów: 45 - Dla: 7 użytkownika


ale jak według bieg:
  1. ORDER BY bieg', null, 'fetch_all');

to wtedy mam:
  1. Punktów: 50 - Dla: 1 użytkownika
  2. Punktów: 49 - Dla: 4 użytkownika
  3. Punktów: 48 - Dla: 2 użytkownika
  4. Punktów: 47 - Dla: 5 użytkownika
  5. Punktów: 46 - Dla: 3 użytkownika
  6. Punktów: 45 - Dla: 7 użytkownika

i to się w żaden sposób nie trzyma niczego co_jest.gif
Go to the top of the page
+Quote Post
Damonsson
post
Post #8





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


Czego się nie trzyma? Sortowanie jest poprawne w każdym przypadku (bieg/time), więc gdzie tkwi problem?
Go to the top of the page
+Quote Post
damian238
post
Post #9





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 3.11.2013

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


no bo przy takim przypadku:
  1. id user_id time bieg punkty
  2. 1 5 1385480672 2458.78 50
  3. 2 6 1385480690 2518.34 48
  4. 3 7 1385480712 2488.56 46
  5. 4 8 1385480730 2726.8 49
  6. 5 9 1385480750 2518.34 47
  7. 7 4 1385816738 2607.68 45


punktacja powinna być taka:
  1. punkty id
  2. 50 1
  3. 49 3
  4. 48 2 lub 5
  5. 47 2 lub 5
  6. 46 7
  7. 45 4


no bo np. user o id 1 ma najniższą wartość (2458.78) więc ma 50 punktów, ale np gracz o id 3 ma wartość 2488.56 więc on jest kolejny i to on powinien mieć 49 punktów, a nie gracz o id 4
Go to the top of the page
+Quote Post
Damonsson
post
Post #10





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


Mój błąd, myślałem, że poprawnie posortowało.


Czyli problem jest z kolumną bieg. I już nawet widzę jaki.

Masz liczbę XXXX.XX

czyli 6 znaków łącznie, 2 znaki po kropce

Więc nie `bieg` decimal(4,2) NOT NULL,
a: `bieg` decimal(6,2) NOT NULL,


Tylko jakim cudem, zmieściłeś to w kolumnie? Powinieneś dostać błąd, albo każdy bieg powinien wynosić maksymalną wartość czyli 99.99.

Ten post edytował Damonsson 4.12.2013, 08:11:29
Go to the top of the page
+Quote Post
damian238
post
Post #11





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 3.11.2013

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


poprawiłem, ale nadal coś jest źle
zacznę jeszcze raz pisać wszystko teraz po edycji
1.gdy mam:
  1. <?php
  2. include('../includes/config.php');
  3.  
  4. $roznica = 5407;
  5.  
  6. $players_list = query('SELECT players.*, zawody.id as conID FROM zawody
  7. INNER JOIN players on players.id=user_id ORDER BY bieg', null, 'fetch_all');
  8. foreach($players_list['fetch'] as $player)
  9. {
  10. $n++;
  11. $bieg = biegnij($player['skill_szybkosc'], $player['skill_technika'], $player['skill_kondycja']);
  12. query('UPDATE zawody SET bieg='.$roznica.'-'.$bieg.' WHERE id=?', array($player['conID']));
  13. }
  14.  
  15. $players_list = query('SELECT players.*, zawody.id as conID FROM zawody
  16. INNER JOIN players on players.id=user_id
  17. ORDER BY bieg', null, 'fetch_all');
  18.  
  19. $points = 50;
  20. foreach($players_list['fetch'] as $player)
  21. {
  22. echo 'Punktów: '.$points.' - Dla: '.$player['conID'].' użytkownika';
  23. echo '<br />' ;
  24.  
  25. $points--;}
  26. ?>

to mi się wyświetla:
  1. 0
  2. 2680.2
  3. 0
  4. 2739.76
  5. 0
  6. 2709.98
  7. 0
  8. 2739.76
  9. 0
  10. 2799.32
  11. Punktów: 50 - Dla: 1 użytkownika
  12. Punktów: 49 - Dla: 4 użytkownika
  13. Punktów: 48 - Dla: 2 użytkownika
  14. Punktów: 47 - Dla: 5 użytkownika
  15. Punktów: 46 - Dla: 3 użytkownika


2.a jak mam:
  1. <?php
  2. include('../includes/config.php');
  3.  
  4. $roznica = 5407;
  5.  
  6. $players_list = query('SELECT players.*, zawody.id as conID FROM zawody
  7. INNER JOIN players on players.id=user_id ORDER BY bieg', null, 'fetch_all');
  8. foreach($players_list['fetch'] as $player)
  9. {
  10. $n++;
  11. $bieg = biegnij($player['skill_szybkosc'], $player['skill_technika'], $player['skill_kondycja']);
  12. query('UPDATE zawody SET bieg='.$roznica.'-'.$bieg.' WHERE id=?', array($player['conID']));
  13. }
  14.  
  15. $players_list = query('SELECT players.*, zawody.id as conID FROM zawody
  16. INNER JOIN players on players.id=user_id ORDER BY bieg', null, 'fetch_all');
  17.  
  18. $points = 50;
  19. foreach($players_list['fetch'] as $player)
  20. {
  21. query('UPDATE zawody SET punkty='.$points.' WHERE id=?', array($player['conID']));
  22.  
  23. $points--;
  24. ?>

to w bazie się wyświetla:
  1. id user_id time bieg punkty
  2. 1 4 1386170055 2548.12 50
  3. 2 5 1386170085 2488.56 48
  4. 3 6 1386170111 2726.80 46
  5. 4 7 1386170140 2667.24 49
  6. 5 8 1386170179 2577.90 47


jak w drugim przykładzie tego crona wykonam nawet 100 razy to w kolumnie bieg wartość zawsze się zmienia na inną, ale punkty zawsze w każdym wierszu zostają w takiej samej ilości,
i podobnie jest w pierwszym przypadku, bo również zawsze zostaje taka sama ilość punktów dla tego msamego gracza

Ten post edytował damian238 4.12.2013, 17:56:40
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: 22.08.2025 - 03:27