Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Prośba o radę ws. kodu
Forum PHP.pl > Forum > PHP
Vafel
Witam.
Na swoim forum z silnikiem phpbb by przemo, wgrałem modyfikację, która wyświetla listę używanych systemów, oraz przeglądarek przez użytkownika.
Pokażę zaraz kod z pliku php, odpowiedzialny za to. Dzisiaj dodałem taką rzecz, żeby sortowało wpisy wg daty użycia przeglądarki rosnąco i tu pojawia sie problem, bo niekiedy nie sortuje prawidłowo, na przykład na samej górze jest przeglądarka i system, który był użyty wcześniej, niż te niżej. Oto kod:j:

  1. $sql = "SELECT user_agent, COUNT(*) as how_much
  2. FROM " . POSTS_TABLE . "
  3. WHERE poster_id = $user_id
  4. GROUP BY user_agent
  5. ORDER BY post_id DESC LIMIT 10";
  6.  
  7. if ( !($result = $db->sql_query($sql)) )
  8. {
  9. message_die(GENERAL_ERROR, 'Couldn\'t obtain user agents list', '', __LINE__, __FILE__, $sql);
  10. }
  11.  
  12.  
  13. $marker = $total_usage = 0;
  14. $ua_db = $ico_sys_db = $ico_brow_db = $usages = array();
  15. while ( $row = $db->sql_fetchrow($result) )
  16. {
  17. $user_agent = unserialize(stripslashes($row['user_agent']));
  18. $total_usage += $row['how_much'];
  19. if ( trim($user_agent[2]) == "" ) continue;
  20. $usages[md5($user_agent[2])] = $row['how_much'];
  21. $ico_sys_db[$marker] = $user_agent[0];
  22. $ico_brow_db[$marker] = $user_agent[1];
  23. $ua_db[$marker] = $user_agent[2];
  24. $marker++;
  25. }
  26.  
  27. if ( count($ua_db) )
  28. {
  29. $template->assign_block_vars('user_agents', array(
  30. 'L_USER_AGENTS' => $lang['uas_title_mod'],
  31. 'L_BROWSERS' => $lang['uas_browsers_mod'],
  32. 'L_USAGE' => $lang['uas_usage_mod']
  33. ));
  34.  
  35. foreach( $ua_db as $marker => $user_agent )
  36. {
  37. $ico_sys = '<img src="' . $images['images'] . '/user_agent/' . $ico_sys_db[$marker] . '" alt="" title="' . $user_agent . '" border="0">';
  38. $ico_brow = '<img src="' . $images['images'] . '/user_agent/' . $ico_brow_db[$marker] . '" alt="" title="' . $user_agent . '" border="0">';
  39. $usage = $usages[md5($user_agent)] . ' (' . round($usages[md5($user_agent)] / $total_usage * 100,1) . '%)';
  40. $template->assign_block_vars('user_agents.rows',array(
  41. 'UAS_ICO_SYSTEM' => $ico_sys,
  42. 'UAS_ICO_BROWSER' => $ico_brow,
  43. 'UAS_USER_AGENT' => $user_agent,
  44. 'UAS_USAGE' => $usage
  45. ));
  46. }
  47. }


To, co dodałem dziś:
  1. ORDER BY post_id DESC LIMIT 10";


W order by wstawiłem sortowanie wg. kolumny post_id, ale jeśli dam wg. post_time, nie ma różnicy, dalej jest tak samo. Modyfikacja nie jest moja. W tabeli z postami jest dodana kolumna user_agent i przy każdym poście jest dopisywana informacja o przeglądarce i systemie. Grupuje te same informacje, następnie przez order wyświetla w odpowiedniej kolejności i tak w 90% jest, ale zdarzają się takie kwiatki.
Pomoże ktoś?
wizu
Chyba nie do końca wiesz jak działa GROUP BY.
Poczytaj na ten temat, a od razu zrozumiesz, dlaczego w ten sposób to Ci się nie uda.
wookieb
Temat: Jak poprawnie zatytulowac watek
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.