Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP + MySQL] Skryt redakcja_ilosc_newsow.php, Skryt liczący ilość newsów w ciągu jakiegoś okresu czasu
henio
post 10.05.2008, 16:21:20
Post #1





Grupa: Zarejestrowani
Postów: 237
Pomógł: 1
Dołączył: 15.10.2004
Skąd: Lublin

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


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. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
marcio
post 10.05.2008, 18:18:12
Post #2





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


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


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
henio
post 10.05.2008, 20:21:50
Post #3





Grupa: Zarejestrowani
Postów: 237
Pomógł: 1
Dołączył: 15.10.2004
Skąd: Lublin

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


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.
Go to the top of the page
+Quote Post
dr_bonzo
post 10.05.2008, 20:28:47
Post #4





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


SELECT ( SELECT count( costam ) FROM blah ..... ) AS wartosc_1, ( SELECT ...... ) AS ....
itd


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
henio
post 11.05.2008, 22:38:59
Post #5





Grupa: Zarejestrowani
Postów: 237
Pomógł: 1
Dołączył: 15.10.2004
Skąd: Lublin

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


Nie bardzo wiem jak wykorzystać twoją podpowiedź, mógłbyś napisać mi jakiś przekład bez skrótów typu ...
Go to the top of the page
+Quote Post
Lonas
post 12.05.2008, 06:02:31
Post #6





Grupa: Zarejestrowani
Postów: 576
Pomógł: 14
Dołączył: 9.11.2005

Ostrzeżenie: (20%)
X----


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..

Ten post edytował Lonas 12.05.2008, 06:03:42


--------------------
Go to the top of the page
+Quote Post
henio
post 17.05.2008, 22:07:32
Post #7





Grupa: Zarejestrowani
Postów: 237
Pomógł: 1
Dołączył: 15.10.2004
Skąd: Lublin

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


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 6.07.2025 - 21:51