Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP + MySQL] Sortowanie :P, Małe sortowanko rekordów.
Mescam
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 21.08.2007

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


Witajcie.

Mam sobie taką małą bazę danych, gdzie są trzy pola.
ID <-- Id usera
suma <-- suma "czegośtam" usera
rank <-- o tym za chwilę

Tabela ma w sobie kilku userów o różnych wartościach w polu "suma"
Teraz chciałbym przeprowadzić ranking za pomocą pola rank.
Czyli: Nie wiem jak napisać w php/mysql skrypt, który sortuje rekordy pod względem wartości pola "suma", od największego do najmniejszego, i jego pozycje zapisuje do pola rank.


Pomożecie? (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Z góry dziękuję i pozdrawiam

Ten post edytował Mescam 27.08.2007, 11:07:28
Go to the top of the page
+Quote Post
kornel-php
post
Post #2





Grupa: Zarejestrowani
Postów: 210
Pomógł: 20
Dołączył: 7.07.2006
Skąd: Krotoszyn

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


Małe przegięcie... Użyj wyszukiwarki na forum, albo google
Go to the top of the page
+Quote Post
drPayton
post
Post #3





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


A szukaj według słów: [sql]ORDER BY, UPDATE, [php]foreach
Go to the top of the page
+Quote Post
Mescam
post
Post #4





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 21.08.2007

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


Szukam szukam i jakoś mi to nic nie daje (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Mam cosik takiego

  1. <?
  2. $start = 1;
  3. $query = doquery("SELECT * FROM users ORDER BY suma DESC");
  4.  
  5. while ($row = mysql_fetch_assoc($query)){
  6. $id = $row['ID'];
  7. $start++;
  8.  
  9. doquery("UPDATE users SET `rank`= {$start} WHERE `ID` = {$id}");
  10.  
  11.  
  12. }
  13.  
  14. ?>


Ale nie bardzo działa (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
drPayton
post
Post #5





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


Co to znaczy "nie bardzo działa"?
Co to jest "doquery"? Osobna funkcja która wywołuje zapytania sql? Jeśli tak, to pewnie zwraca wartość wybraną selectem (tablicę). Więc:
  1. <?php
  2. $start = 1;
  3. $users = doquery("SELECT * FROM users ORDER BY suma DESC");
  4. foreach($users AS $user) {
  5. doquery("UPDATE users SET `rank`= {$start} WHERE `ID` = {$user['id']}");
  6. $start++;
  7. }
  8. ?>

A jeśli nie, to powiedz co zwraca funkcja doquery...

btw:
Jeżeli już musisz używać tego czegoś (jak to ` się u licha nazywa??), to rób to konsekwentnie, nazwę tabeli też, nie tylko nazwy pól. Inaczej to bez sensu...
A najlepiej nie używaj i nie słuchaj tych, którzy mówią że warto. Nie warto...

Ten post edytował drPayton 27.08.2007, 14:59:35
Go to the top of the page
+Quote Post
Mescam
post
Post #6





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 21.08.2007

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


Ah, zapomniałem powiedzieć, doquery to funkcja mysql_query() (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Przepraszam (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Zaraz przetestuje to co napisałeś/


edit

Warning: Invalid argument supplied for foreach()

:/

Ten post edytował Mescam 27.08.2007, 15:15:39
Go to the top of the page
+Quote Post
drPayton
post
Post #7





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


Czyli zamieniłeś tylko nazwę funkcji na potrzeby posta? W takim razie wróć do poprzedniego kodu i ponawiam pytanie: Co to znaczy "nie bardzo działa"?

Ten post edytował drPayton 27.08.2007, 15:18:21
Go to the top of the page
+Quote Post
Mescam
post
Post #8





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 21.08.2007

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


Hm, ustalmy, że mam taki kod:
  1. <?
  2. $start = 1;
  3. $query = mysql_query("SELECT * FROM users ORDER BY suma DESC");
  4.  
  5. while ($row = mysql_fetch_assoc($query)){
  6. $id = $row['ID'];
  7. $start++;
  8.  
  9. mysql_query("UPDATE users SET `rank`= {$start} WHERE `ID` = {$id}");
  10.  
  11.  
  12. }
  13.  
  14. ?>


Mam 3 userów:
User o ID1 - Suma: 0
User o ID2 - Suma: 170
User o ID3 - Suma: 0
User o ID1 w polu rank ma '2'
User o ID2 w polu rank ma '2'
User o ID3 w polu rank ma '3'

A raczej user o id2 powinien mieć rank 1 a
2/3 pozycja losowa
Go to the top of the page
+Quote Post
drPayton
post
Post #9





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


Wszystko działa poprawnie zgodnie z kodem. Słuchaj:
Deklarujesz zmienną start z początkową wartością 1. Najpierw ją zwiększasz o jeden, a dopiero potem wpisujesz do bazy. Czyli nadawanie "rank'u" zaczynasz od 2!
Trochę się zamotałem czytając ten ostatni post, ale chyba wiem o co biega, więc:
  1. <?
  2.  
  3. $start = 1;
  4.  
  5. $query = mysql_query("SELECT * FROM users ORDER BY suma DESC");
  6.  
  7. while ($row = mysql_fetch_assoc($query)){
  8. $id = $row['ID'];
  9.  
  10. if(< $row['suma']) { // Przy założeniu, że pole suma w bazie jest typu liczbowego!
  11. mysql_query("UPDATE users SET `rank`= {$start} WHERE `ID` = {$id}");
  12. $start++;
  13. } else {
  14. mysql_query("UPDATE users SET `rank`= 0 WHERE `ID` = {$id}");
  15. }
  16.  
  17. }
  18.  
  19. ?>

W ten sposób nadasz kolejno rosnące wartości rank dla userów, dla których suma jest > 0, i rank == 0, dla tych, gdzie suma jest = 0.
Go to the top of the page
+Quote Post
Mescam
post
Post #10





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 21.08.2007

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


O, dziękuję za pomoc. O takie coś właśnie mi chodziło.

A tak nawiasem: include(); wykonuje kod zawarty w includowanym pliku?

Pozdrawiam.
Go to the top of the page
+Quote Post
drPayton
post
Post #11





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


Tak, include (require) dołącza plik w miejscu wywołania i (jeśli to php) wykonuje go przed przejściem dalej (poniżej wywołania include).

btw: nie include('plik.php'); tylko include 'plik.php';

Include to nie jest funkcja; zastosowanie nawiasów nic wprawdzie nie zmieni, ale po co jak nie trzeba...

Ten post edytował drPayton 27.08.2007, 16:51:35
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: 28.08.2025 - 08:02