Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP + MySQL] Skryt redakcja_ilosc_newsow.php
Forum PHP.pl > Forum > Przedszkole
henio
Utworzyłem skrypt, kóry liczy mi liczbę newsów każdego użytkownika. Chciałbym go rozszerzyc tak aby oprócz tego liczył mi jeszcze liczbe newsów dziś, wczoraj, w ciagu 7 dni i w ciągu 30 dni. Mógłbym to zrobić zwiększając liczbę zapytań do bazy danych. A chodzi mi o to, aby używać jak najmniej zapytań do bazy danych. Więc czy ma ktoś jakiś pomysł?

Zapytanie o którym mowa:
"SELECT count(*) AS ilosc_artykul, rodzaj_newsa FROM newsy WHERE id_uzytkownik = ".$rekord['id_uzytkownik']." GROUP BY rodzaj_newsa ORDER BY ilosc_artykul DESC"

  1. <?php
  2.  
  3.  
  4. // Załączenie funkcji i kodu odpowiadającego za połączenie z bazą danych
  5. include("../baza.php");
  6. include("funkcje/funkcje.php");
  7.  
  8. // Sprawdzanie czy użytkownik jest zalgowany
  9. if(!empty($_SESSION['login']) && !empty($_SESSION['haslo']) && !empty($_SESSION['ostatnio_online']) && !empty($_SESSION['id_uzytkownik']))
  10. { // Jeśli tak to uzyska dosęp do strony
  11.  
  12. // Sprawdzanie czy zalogowany użytkownik jest członkiem redakcji
  13. if($_SESSION['zarejestrowany'] !== 'Uzytkownik')
  14. { // Jeśli tak to uzyska dostęp do strony
  15.  
  16. naglowek("Redakcja w liczbach");
  17. include("naglowek.php");
  18. include("menu.php");
  19. echo "<div id=\"tresc\">\n";
  20.  
  21. // Utworzenie tablicy newsy, która bedzie przechowywać liczbę newsów i artykułów n
    apisanych przez redaktorów
  22. $newsy = array();
  23.  
  24. // Utowrzenie zmiennych tymaczowych, które później będą przechowywać liczbę poszcz
    ególnych rodzajów newsów
  25. $liczba_zwykly_news = 0;
  26. $liczba_wydarzenie = 0;
  27. $liczba_artykul = 0;
  28. $liczba_ogloszenie = 0;
  29.  
  30. // Pobranie z bazy danych listy wszystkich członków redakcji i zapisanie rekordów 
    w tablicy asocjacyjnej
  31. $wynik = mysqli_query($mysql, "SELECT id_uzytkownik, login, ostatnio_online FROM uzytkownicy WHERE zarejes
    trowany != 'Uzytkownik' ORDER BY login ASC"
    ) or die ('Zapytanie jest błędne!<br />'.mysqli_error($mysql));
  32.  
  33. while($rekord = mysqli_fetch_assoc($wynik))
  34. {
  35.  
  36. // Pobranie z bazy danych liczby zwykłych newsów, wydarzeń i artykułów każdego red
    aktora
  37. $wynik2 = mysqli_query($mysql, "SELECT count(*) AS ilosc_artykul, rodzaj_newsa FROM newsy WHERE id_uzytkownik = ".$rekord['id_uzytkownik']." GROUP BY rodzaj_newsa ORDER BY ilosc_artykul DESC") or die ('Zapytanie jest błędne!<br />'.mysqli_error($mysql));
  38.  
  39. // Policzenie ile było dzisiaj, wczoraj , w ciągu 7 dni, w ciągu 30 dni i w ogóle
  40. while($rekord2 = mysqli_fetch_assoc($wynik2))
  41. {
  42.  
  43. // Sprawdzenie jak to jest rodzaj newsa: zwykły news, wydarzenie, artykuł czy ogło
    szenie
  44. if($rekord2['rodzaj_newsa'] == 'zwykly_news')
  45. { // Jeżeli to jest zwykly news to zmieniona zostaje zmienna tymczasowa przechowując
    a liczbę zwykłych newsów dodanych przez danego użytkownika
  46. $liczba_zwykly_news = $rekord2['ilosc_artykul'];
  47. }
  48. elseif($rekord2['rodzaj_newsa'] == 'wydarzenie')
  49. { // Jeżeli to jest wydarzenie to zmieniona zostaje zmienna tymczasowa przechowująca
     liczbę wydarzeń dodanych przez danego użytkownika
  50. $liczba_wydarzenie = $rekord2['ilosc_artykul'];
  51. }
  52. elseif($rekord2['rodzaj_newsa'] == 'artykul')
  53. { // Jeżeli to jest artykuł to zmieniona zostaje zmienna tymczasowa przechowująca li
    czbę artykułów dodanych przez danego użytkownika
  54. $liczba_artykul = $rekord2['ilosc_artykul'];
  55. }
  56. elseif($rekord2['rodzaj_newsa'] == 'ogloszenie')
  57. { // Jeżeli to jest ogłszenie to zmieniona zostaje zmienna tymczasowa przechowująca 
    liczbę ogłoszeń dodanych przez danego użytkownika
  58. $liczba_ogloszenie = $rekord2['ilosc_artykul'];
  59. }
  60. }
  61.  
  62. // Policzenie łącznej ilości wszystkich rodzajów newsa
  63. $suma_rodzaj = $liczba_zwykly_news + $liczba_wydarzenie + $liczba_artykul + $liczba_ogloszenie;
  64.  
  65. // Wstawienie danych do tablicy
  66. $newsy[] = array('Autor' => "".$rekord['login']."",
  67.  'Zwykle_newsy' => "$liczba_zwykly_news",
  68.  'Wydarzenia' => "$liczba_wydarzenie",
  69.  'Artykuly' => "$liczba_artykul",
  70.  'Ogloszenia' => "$liczba_artykul",
  71.  'Lacznie' => "$suma_rodzaj",
  72.  'Ostatnio_online' => "".$rekord['ostatnio_online'].""
  73.  );
  74. }
  75.  
  76. // Posortowanie danych malejąco po ilości zwykłych newsów
  77. foreach ($newsy as $key => $rows) 
  78. {
  79. $autor[$key] = $rows['Autor'];
  80. $zwykle_newsy[$key] = $rows['Zwykle_newsy'];
  81. $wydarzenia[$key] = $rows['Wydarzenia'];
  82. $artykuly[$key] = $rows['Artykuly'];
  83. $ogloszenia[$key] = $rows['Ogloszenia'];
  84. $lacznie[$key] = $rows['Lacznie'];
  85. $ostatnio_online[$key] = $rows['Ostatnio_online'];
  86. }
  87. array_multisort($zwykle_newsy, SORT_DESC, $wydarzenia, SORT_DESC, $artykuly, SORT_DESC, $newsy);
  88.  
  89. // Wyświetlenie danych w tabeli
  90. ?>
  91. <table>
  92. <tr><th>Redaktor</th><th>Zwykłe newsy</th><th>Wydarzenia</th><th>Artykuły</th><th>Ogłoszenia</th><th>Łącznie</th><th>Ostatnio online</th></tr>
  93. <?php
  94. for($i=0; $i<count($newsy); $i++)
  95. {
  96. echo "<tr><td>".$newsy[$i]['Autor']."</td><td>".$newsy[$i]['Zwykle_newsy']."</td><td>".$newsy[$i]['Wydarzenia']."</td><td>".$newsy[$i]['Artykuly']."</td><td>".$newsy[$i]['Ogloszenia']."</td><td>".$newsy[$i]['Lacznie']."</td><td>".$newsy[$i]['Ostatnio_online']."</td></tr>\n";
  97. }
  98. ?>
  99. </table>
  100. <?php
  101.  
  102. echo "</div>\n";
  103. include("stopka.php");
  104. }
  105. else
  106. { // Jeśli nie to pojawi się komunikat o braku dostępu do tej części panelu administ
    racyjnego
  107. include("brak_dostepu.php");
  108. }
  109. }
  110. else
  111. { // Jeśli nie to pokaże się komunikat o konieczności zalogowania się
  112. include("zalogowany_nie.php");
  113. }
  114. ?>
marcio
Co do dzisiaj to robisz tak dajesz kolumne czas int(15) do ktorej zapisujesz date dodania za pomoca time() Potem robisz zapytanie ktora sprawdza czy news jest starszy niz jeden dzien czyli 60*60*24 cos takiego

  1. <?php
  2. // gdy dodajesz do bazy dodajesz tez taka zmienna $czas = time();
  3.  
  4. //Potem gdy odczytujesz robisz mniej wiecej cos takiego
  5. $dzis = 60*60*24;
  6. $query = ('select czas from TABELA where czas < '.$dzis.'');
  7. $wynik = mysql_query($query);
  8. $ile = mysql_num_rows($wynik); // ilosc
  9. ?>

Cos takiego
henio
Wiem jak to zrobić. Chodzi mi czy nie można tego zrobić jakoś za jednym zamachem, bo dodanie 4 dodatkowych zapytań do bazy danych (dzisiaj, wczoraj, 7 dni, 30 dni) zwiększy czas generowania strony.
dr_bonzo
SELECT ( SELECT count( costam ) FROM blah ..... ) AS wartosc_1, ( SELECT ...... ) AS ....
itd
henio
Nie bardzo wiem jak wykorzystać twoją podpowiedź, mógłbyś napisać mi jakiś przekład bez skrótów typu ...
Lonas
Przeciez wyraznie Ci napisal

  1. SELECT ( SELECT count( newsy ) FROM newsy WHERE czas < 10 dni ) AS wartosc_1, ( SELECT count( newsy ) FROM newsy WHERE czas < 15 dni ) AS wartosc_2 FROM tabela


itd..
henio
Cytat(Lonas @ 12.05.2008, 05:02:31 ) *
Przeciez wyraznie Ci napisal

  1. SELECT ( SELECT count( newsy ) FROM newsy WHERE czas < 10 dni ) AS wartosc_1, ( SELECT count( newsy ) FROM newsy WHERE czas < 15 dni ) AS wartosc_2 FROM tabela


itd..

Wpisałem
  1. SELECT ( SELECT count (*) FROM newsy WHERE DATA < (jakas ilosc) ) AS data_1, ( SELECT count (*) FROM newsy WHERE DATA < (jakas inna ilosc) ) AS data_2 FROM newsy GROUP BY rodzaj_newsa


I jest błąd

Stowrzyłem takie zapytanie:



I z tego wynikało by, że mam 3 zwykle newsy i 3 wydarzenia, co jest nie prawdą. Widzać to na załączonym powyżej obrazku.

Nadal nic się nie zmieniło i utworzyłem drugi skrypt, który tym razem generuje dobrze, ale używam do tego oddzielnych zapytań do bazy danych co wiąże się z dłużej wykonywanym skryptem i większą ilością linijek, no ale trudno.
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.