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"
<?php
// Załączenie funkcji i kodu odpowiadającego za połączenie z bazą danych
include("../baza.php");
include("funkcje/funkcje.php");
// Sprawdzanie czy użytkownik jest zalgowany
if(!empty($_SESSION['login']) && !empty($_SESSION['haslo']) && !empty($_SESSION['ostatnio_online']) && !empty($_SESSION['id_uzytkownik'])) { // Jeśli tak to uzyska dosęp do strony
// Sprawdzanie czy zalogowany użytkownik jest członkiem redakcji
if($_SESSION['zarejestrowany'] !== 'Uzytkownik')
{ // Jeśli tak to uzyska dostęp do strony
naglowek("Redakcja w liczbach");
include("naglowek.php");
include("menu.php");
echo "<div id=\"tresc\">\n";
// Utworzenie tablicy newsy, która bedzie przechowywać liczbę newsów i artykułów n
apisanych przez redaktorów
// Utowrzenie zmiennych tymaczowych, które później będą przechowywać liczbę poszcz
ególnych rodzajów newsów
$liczba_zwykly_news = 0;
$liczba_wydarzenie = 0;
$liczba_artykul = 0;
$liczba_ogloszenie = 0;
// Pobranie z bazy danych listy wszystkich członków redakcji i zapisanie rekordów
w tablicy asocjacyjnej
$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));
while($rekord = mysqli_fetch_assoc($wynik))
{
// Pobranie z bazy danych liczby zwykłych newsów, wydarzeń i artykułów każdego red
aktora
$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));
// Policzenie ile było dzisiaj, wczoraj , w ciągu 7 dni, w ciągu 30 dni i w ogóle
while($rekord2 = mysqli_fetch_assoc($wynik2))
{
// Sprawdzenie jak to jest rodzaj newsa: zwykły news, wydarzenie, artykuł czy ogło
szenie
if($rekord2['rodzaj_newsa'] == 'zwykly_news')
{ // Jeżeli to jest zwykly news to zmieniona zostaje zmienna tymczasowa przechowując
a liczbę zwykłych newsów dodanych przez danego użytkownika
$liczba_zwykly_news = $rekord2['ilosc_artykul'];
}
elseif($rekord2['rodzaj_newsa'] == 'wydarzenie')
{ // Jeżeli to jest wydarzenie to zmieniona zostaje zmienna tymczasowa przechowująca
liczbę wydarzeń dodanych przez danego użytkownika
$liczba_wydarzenie = $rekord2['ilosc_artykul'];
}
elseif($rekord2['rodzaj_newsa'] == 'artykul')
{ // Jeżeli to jest artykuł to zmieniona zostaje zmienna tymczasowa przechowująca li
czbę artykułów dodanych przez danego użytkownika
$liczba_artykul = $rekord2['ilosc_artykul'];
}
elseif($rekord2['rodzaj_newsa'] == 'ogloszenie')
{ // Jeżeli to jest ogłszenie to zmieniona zostaje zmienna tymczasowa przechowująca
liczbę ogłoszeń dodanych przez danego użytkownika
$liczba_ogloszenie = $rekord2['ilosc_artykul'];
}
}
// Policzenie łącznej ilości wszystkich rodzajów newsa
$suma_rodzaj = $liczba_zwykly_news + $liczba_wydarzenie + $liczba_artykul + $liczba_ogloszenie;
// Wstawienie danych do tablicy
$newsy[] = array('Autor' => "".$rekord['login']."", 'Zwykle_newsy' => "$liczba_zwykly_news",
'Wydarzenia' => "$liczba_wydarzenie",
'Artykuly' => "$liczba_artykul",
'Ogloszenia' => "$liczba_artykul",
'Lacznie' => "$suma_rodzaj",
'Ostatnio_online' => "".$rekord['ostatnio_online'].""
);
}
// Posortowanie danych malejąco po ilości zwykłych newsów
foreach ($newsy as $key => $rows)
{
$autor[$key] = $rows['Autor'];
$zwykle_newsy[$key] = $rows['Zwykle_newsy'];
$wydarzenia[$key] = $rows['Wydarzenia'];
$artykuly[$key] = $rows['Artykuly'];
$ogloszenia[$key] = $rows['Ogloszenia'];
$lacznie[$key] = $rows['Lacznie'];
$ostatnio_online[$key] = $rows['Ostatnio_online'];
}
array_multisort($zwykle_newsy, SORT_DESC
, $wydarzenia, SORT_DESC
, $artykuly, SORT_DESC
, $newsy);
// Wyświetlenie danych w tabeli
?>
<table>
<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>
<?php
for($i=0; $i<count($newsy); $i++)
{
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"; }
?>
</table>
<?php
include("stopka.php");
}
else
{ // Jeśli nie to pojawi się komunikat o braku dostępu do tej części panelu administ
racyjnego
include("brak_dostepu.php");
}
}
else
{ // Jeśli nie to pokaże się komunikat o konieczności zalogowania się
include("zalogowany_nie.php");
}
?>