Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z zapytaniem
Forum PHP.pl > Forum > Bazy danych
masterov
Witam! Chciałem zrobić pewny myk na stronie opartej na phpbb by przemo. W module "Download" wyświetlany jest najwyżej oceniany plik, najczęściej ściągany i ostatnio dodany. Ja chciałem żeby w tym module na stronie głównej wyświetlało po kilka plików, a nie tylko po jednym. Na przykład żeby pokazywało 5 ostatnio dodanych plików oczywiście w odpowiedniej kolejności.

Tutaj jest skrypt, który chyba odpowiada za wyświetlanie tych informacji w tym module i nie wiem, co zrobić aby uzyskać porządany efekt. Dzięki z góry jeśli ktoś ma pomysł.


  1. <?php
  2.  /*
  3.    paFileDB 3.0
  4.    Š2001/2002 PHP Arena
  5.    Written by Todd
  6.    todd@phparena.net
  7.    Keep all copyright links on the script visible
  8.    Please read the license included with this script for more information.
  9.  */
  10.  if ( !defined('IN_PHPBB') )
  11.  {
  12.  die("Hacking attempt");
  13.  }
  14.  
  15.  $locbar = '<span class="nav"><a href="' . append_sid("index.$phpEx") . '" class="nav">' . $board_config['sitename'] . '</a> -> <a href="' . append_sid("dload.php") . '" class="nav">Download</a> -> <a href="' . append_sid("dload.php?action=stats") . '" class="nav">' . $lang['Statistics'] . '</a></span>';
  16.  
  17.  $sql = "SELECT COUNT(*) as files FROM " . PA_FILES_TABLE;
  18.  
  19.  if ( !($result = $db->sql_query($sql)) )
  20.  {
  21.  message_die(GENERAL_ERROR, 'Couldnt Query stat info', '', __LINE__, __FILE__, $sql);
  22.  }
  23.  $row = $db->sql_fetchrow($result);
  24.  $num['files'] = $row['files'];
  25.  [color="#ff0000"]Tutaj si&#281; chyba zaczyna skrypt akurat odpowiedzialny za wyświetlanie ostatnio dodane
    go pliku.[/color]
  26.  $sql = "SELECT * FROM " . PA_FILES_TABLE . " ORDER BY file_time DESC";
  27.  
  28.  if ( !($result = $db->sql_query($sql)) )
  29.  {
  30.  message_die(GENERAL_ERROR, 'Couldnt Query stat info', '', __LINE__, __FILE__, $sql);
  31.  }
  32.  
  33.  $newest = $db->sql_fetchrow($result);
  34.  
  35.  $sql = "SELECT * FROM " . PA_FILES_TABLE . " ORDER BY file_time ASC";
  36.  
  37.  if ( !($result = $db->sql_query($sql)) )
  38.  {
  39.  message_die(GENERAL_ERROR, 'Couldnt Query stat info', '', __LINE__, __FILE__, $sql);
  40.  }
  41.  
  42.  $oldest = $db->sql_fetchrow($result);
  43.  
  44.  $sql = "SELECT * FROM " . PA_FILES_TABLE . " WHERE file_totalvotes > 1 ORDER BY (file_rating/(file_totalvotes-1)) DESC";
  45.  
  46.  if ( !($result = $db->sql_query($sql)) )
  47.  {
  48.  message_die(GENERAL_ERROR, 'Couldnt Query stat info', '', __LINE__, __FILE__, $sql);
  49.  }
  50.  
  51.  $popular = $db->sql_fetchrow($result);
  52.  
  53.  $sql = "SELECT * FROM " . PA_FILES_TABLE . " ORDER BY (file_rating/file_totalvotes) ASC";
  54.  
  55.  if ( !($result = $db->sql_query($sql)) )
  56.  {
  57.  message_die(GENERAL_ERROR, 'Couldnt Query stat info', '', __LINE__, __FILE__, $sql);
  58.  }
  59.  
  60.  $lpopular = $db->sql_fetchrow($result);
  61.  
  62.  $sql = "SELECT * FROM " . PA_FILES_TABLE . " ORDER BY file_dls DESC";
  63.  
  64.  if ( !($result = $db->sql_query($sql)) )
  65.  {
  66.  message_die(GENERAL_ERROR, 'Couldnt Query stat info', '', __LINE__, __FILE__, $sql);
  67.  }
  68.  
  69.  $mostdl = $db->sql_fetchrow($result);
  70.  
  71.  $sql = "SELECT * FROM " . PA_FILES_TABLE . " ORDER BY file_dls ASC";
  72.  
  73.  if ( !($result = $db->sql_query($sql)) )
  74.  {
  75.  message_die(GENERAL_ERROR, 'Couldnt Query stat info', '', __LINE__, __FILE__, $sql);
  76.  }
  77.  
  78.  $leastdl = $db->sql_fetchrow($result);
  79.  
  80.  $sql = "SELECT file_dls, file_rating, file_totalvotes FROM " . PA_FILES_TABLE;
  81.  
  82.  if ( !($result = $db->sql_query($sql)) )
  83.  {
  84.  message_die(GENERAL_ERROR, 'Couldnt Query stat info', '', __LINE__, __FILE__, $sql);
  85.  }
  86.  
  87.  while($row = $db->sql_fetchrow($result))
  88.  {
  89.  $totaldls += $row['file_dls'];
  90.  $total_rating += $row['file_rating'];
  91.  $total_votes += $row['file_totalvotes'];
  92.  }
  93.  
  94.  $avg = @round($total_rating/$total_votes);
  95.  
  96.  $avgdls = @round($totaldls/$num['files']);
  97.  
  98.  $least = @round($lpopular['file_rating']/($lpopular['file_totalvotes']-1));
  99.  
  100.  $most = @round($popular['file_rating']/($popular['file_totalvotes']-1));
  101.  
  102.  require($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . '/lang_pafiledb.' . $phpEx);
  103.  
  104.  $lang['Stats_portal'] = str_replace("{total_files}", $num['files'], $lang['Stats_portal']);
  105.  $lang['Stats_portal'] = str_replace("{total_categories}", $num['cats'], $lang['Stats_portal']);
  106.  $lang['Stats_portal'] = str_replace("{total_downloads}", $totaldls, $lang['Stats_portal']);
  107.  $lang['Stats_portal'] = str_replace("{u_newest_file}", append_sid("dload.php?action=file&amp;id=" . $newest['file_id']), $lang['Stats_portal']);
  108.  $lang['Stats_portal'] = str_replace("{newest_file}", $newest['file_name'], $lang['Stats_portal']);
  109.  $lang['Stats_portal'] = str_replace("{u_oldest_file}", append_sid("dload.php?action=file&amp;id=" . $oldest['file_id']), $lang['Stats_portal']);
  110.  $lang['Stats_portal'] = str_replace("{oldest_file}", $oldest['file_name'], $lang['Stats_portal']);
  111.  $lang['Stats_portal'] = str_replace("{average}", $avg, $lang['Stats_portal']);
  112.  $lang['Stats_portal'] = str_replace("{u_popular}", append_sid("dload.php?action=file&amp;id=" . $popular['file_id']), $lang['Stats_portal']);
  113.  $lang['Stats_portal'] = str_replace("{popular}", $popular['file_name'], $lang['Stats_portal']);
  114.  $lang['Stats_portal'] = str_replace("{most}", $most, $lang['Stats_portal']);
  115.  $lang['Stats_portal'] = str_replace("{u_lpopular}", append_sid("dload.php?action=file&amp;id=" . $lpopular['file_id']), $lang['Stats_portal']);
  116.  $lang['Stats_portal'] = str_replace("{lpopular}", $lpopular['file_name'], $lang['Stats_portal']);
  117.  $lang['Stats_portal'] = str_replace("{least}", $least, $lang['Stats_portal']);
  118.  $lang['Stats_portal'] = str_replace("{avg_dls}", $avgdls, $lang['Stats_portal']);
  119.  $lang['Stats_portal'] = str_replace("{u_most_dl}", append_sid("dload.php?action=file&amp;id=" . $mostdl['file_id']), $lang['Stats_portal']);
  120.  $lang['Stats_portal'] = str_replace("{most_dl}", $mostdl['file_name'], $lang['Stats_portal']);
  121.  $lang['Stats_portal'] = str_replace("{most_no}", $mostdl['file_dls'], $lang['Stats_portal']);
  122.  $lang['Stats_portal'] = str_replace("{u_least_dl}", append_sid("dload.php?action=file&amp;id=" . $leastdl['file_id']), $lang['Stats_portal']);
  123.  $lang['Stats_portal'] = str_replace("{least_dl}", $leastdl['file_name'], $lang['Stats_portal']);
  124.  $lang['Stats_portal'] = str_replace("{least_no}", $leastdl['file_dls'], $lang['Stats_portal']);
  125.  
  126.  $template->assign_vars(array(
  127. "L_STATISTICS" => $lang['Statistics'],
  128. "Stats_portal" => $lang['Stats_portal'],
  129.  //  "LOCBAR" => locbar($locbar)
  130.  )
  131.  );
  132.  ?>
batman
Jest to kolejny post dzisiejszego dnia, pisany przez nową osobę, bez poprawnego bbcode. Nie mam już cierpliwości, dlatego proszę (później zamknę) o poprawienie bbcode!
masterov
Za bardzo nie wiem o co chodzi:/ Chciałem uzyskać pomoc w temacie więc chyba można podarować sobie uwagi dotyczące takich szczegółów, ale jeśli chodzi o umieszczenie skrytpu w ramce kodu, to proszę bardzo.
webdice
Cytat(masterov @ 6.06.2008, 19:23:07 ) *
(...) chyba można podarować sobie uwagi dotyczące takich szczegółów.


Nie nie można, regulamin jest po to by go stosować. Kod nie objęty znacznikami bbcode jest nieczytelny, a ja nie mam zamiaru wpatrywania się w zwykły tekst.

Tym razem poprawiam za Ciebie, na przyszłość pamiętaj aby kod PHP wklejać miedzy znaczniki [php][/php], analogicznie HTML, SQL itp.
masterov
Ok moja wina, bo nie czytałem regulaminu:) Ale bardzo proszę o pomoc sadsmiley02.gif
webdice
Wyniki musisz mieć w pętli.

  1. <?php
  2. while ($popular = $db->sql_fetchrow($result))
  3. {
  4. // tu odpowiednio przekazujesz do systemu szablonów.
  5. }
  6. ?>


Nie znam phpbb więc więcej Ci nie pomogę. Poza tym jest to tragicznie napisane. Po co pobierać całą bazę by wyciągnąć jeden rekord? Do zapytań dodaj sobie LIMIT 1 lub zamiast 1 ilość rekordów do pobrania.
masterov
Właśnie chodzi o to, że musiałbym pokazać zawartość kilku plików php, ponieważ cały silnik jest tak zbudowany, że ten moduł dla poprawnej pracy łączy się z wieloma plikami:/ Chodzi mi dokładnie o kod, który pobierze mi 5 ostatnio dodanych rekordów z bazy.
webdice
To Ci napisałem co masz zrobić, aktualnie jest tak:

  1. <?php
  2. $popular = $db->sql_fetchrow($result);
  3. ?>


Czyli pobiera tylko jeden rekord, użyj pętli tak jak napisałem Ci wyżej i przekaż to do systemu szablonów. Na tym forum gotowca nie dostaniesz, chyba że na Giełdzie ofert.
masterov
Więc dzięki za pomoc i temat można zamknąć.
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.