Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Sortowanie archiwum według lat
bols86
post 27.07.2011, 10:58:23
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 27.07.2011

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


Witam, jako, że raczkuje w tematyce PHP mam do Was gorącą prośbę. Chciałbym przerobić moje archiwum na stronce, aby lata wyświetlały się od najnowszych do najstarszych, a nie jak to teraz ma miejsce od najstarszych do najnowszych.
  1. <?php
  2. //prawdzamy najnowszego i najstarszego niusa
  3. $ask_newest_query = "SELECT ne_id,ne_data FROM news WHERE ne_dzial NOT IN('podrzedny','news_en','cwiczenia_en') ORDER BY ne_data DESC LIMIT 1";
  4. $ask_oldest_query = "SELECT ne_id,ne_data FROM news WHERE ne_dzial NOT IN('podrzedny','news_en','cwiczenia_en') ORDER BY ne_data LIMIT 1";
  5. $ask_oldest = mysql_query($ask_oldest_query);
  6. $ask_newest = mysql_query($ask_newest_query);
  7. $czy_zwrocil_cos_oldest = mysql_numrows($ask_oldest);
  8. $czy_zwrocil_cos_newest = mysql_numrows($ask_newest);
  9. ?>
  10.  
  11. <table class="newsy">
  12. <?php
  13.  
  14.  
  15. if ($czy_zwrocil_cos_newest > 0 && $czy_zwrocil_cos_oldest > 0){
  16. $newest = mysql_fetch_array($ask_newest);
  17. $oldest = mysql_fetch_array($ask_oldest);
  18.  
  19. $last = substr($newest['ne_data'], 0,-15); // rok wprowadzenia ostatniego niusa
  20. $first = substr($oldest['ne_data'], 0,-15); // rok wprowadzenia pierwszego niusa
  21. $ile_lat = $last - $first;
  22.  
  23.  
  24. $lata = array(); // tablica przechowujaca wystapienia poszczegolnych lat
  25. $actual_year = date(Y);
  26. for ($rok = $first; $rok <= $last; $rok++ ){
  27. if ($rok > 1800 && $rok <= $actual_year){
  28.  
  29. $czy_jest_rok_query = "SELECT ne_id FROM news WHERE ne_dzial NOT IN('podrzedny','news_en','cwiczenia_en') AND ne_data LIKE '%$rok%' ORDER BY ne_data LIMIT 1";
  30. $czy_jest_rok = mysql_query($czy_jest_rok_query);
  31. $ile_rokow = mysql_numrows($czy_jest_rok);
  32.  
  33. if($ile_rokow > 0){
  34. $lata[] = $rok ; // dodajemy do tablicy wystapienie danego roku w bazie
  35. }
  36. }
  37. }
  38.  
  39. foreach ($lata as $value ){ // sprawdzamy jakie miesiace wystapily w kazdym roku
  40.  
  41. $miesiace = array(); // tablica przechowujaca wszystkie miesiace wystepujace w bazie dla danego roku
  42.  
  43. for($mies = 0; $mies < 12; $mies++ ){
  44.  
  45. $month = $mies + 1;
  46.  
  47. if ($month > 9) $zero = ""; // co by sie zero przed pojedyncza cyfra oznaczajaca miesiac pojawilo
  48. else $zero = 0;
  49.  
  50. $ask_jest_miesiac_query = "SELECT ne_id FROM news WHERE ne_dzial NOT IN('podrzedny','news_en','cwiczenia_en') AND ne_data LIKE '%$value-$zero$month%' ORDER BY ne_data DESC LIMIT 1";
  51. $ask_jest_miesiac = mysql_query($ask_jest_miesiac_query);
  52. $ile_jest_miesiac = mysql_numrows($ask_jest_miesiac);
  53.  
  54. if ($ile_jest_miesiac > 0 ){
  55. $miesiace[] = $zero.$month; // wpisujemy do tablicy wystapienie danego miesiace w bazie
  56. }
  57. }
  58. //-- TABLICA ASOCJACYJNA W KTOREJ KLUCZEM JEST DANY ROK WYSTEPUJACY W BAZIE A WARTOSCIA DANEJ POZYCJI JEST TABLICA MIESIECY W DANYM ROKU ---//
  59. $data["$value"] = $miesiace;
  60. }
  61.  
  62.  
  63. if ($_GET['id']){ // wczytujemy newsa calego
  64. ?>
  65. <tr>
  66. <td>
  67. <?php
  68. include('news_arch.php');
  69. ?>
  70. </td>
  71. </tr>
  72. <?php
Go to the top of the page
+Quote Post
roghatt
post 27.07.2011, 13:42:33
Post #2





Grupa: Zarejestrowani
Postów: 250
Pomógł: 11
Dołączył: 20.03.2006

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


w zapytaniach wystarczy DESC zmienić na ASC wtedy w odwrotnej kolejności wyświetla snitch.gif
Go to the top of the page
+Quote Post
bols86
post 27.07.2011, 21:03:26
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 27.07.2011

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


Dzięki wielkie Kolego exclamation.gif Jutro będę testował i odpisze co i jak wink.gif.
A więc niestety, po podmianie DESC na ASC pokazuje mi tylko 2001r., reszta gdzieś ginie, echhhh exclamation.gif

Ten post edytował bols86 28.07.2011, 07:02:30
Go to the top of the page
+Quote Post
roghatt
post 28.07.2011, 08:26:31
Post #4





Grupa: Zarejestrowani
Postów: 250
Pomógł: 11
Dołączył: 20.03.2006

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


ale w zapytaniach masz ustawione LIMIT 1 wiec jedno Ci się wyświetla.
Zwiększ tą liczbę.
Go to the top of the page
+Quote Post
bols86
post 28.07.2011, 10:21:37
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 27.07.2011

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


Przestawienie LIMIT 1 na LIMIT 10 nic nie dało, usunięcie jego też nie sad.gif.
Go to the top of the page
+Quote Post
Insomiaa
post 28.07.2011, 10:43:16
Post #6





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 3.11.2006

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


Nic dziwnego, że pobiera jeden wynik jak tylko raz wywołujesz funkcję fetch_array, musisz ją wywoływać w jakiejś pętli.
  1.  
  2. while($newest = mysql_fetch_array($ask_newest)){
  3. //tutaj przetwazanie wiesza.......
  4. }
  5.  


Ten post edytował Insomiaa 28.07.2011, 12:14:46
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: 14.08.2025 - 03:15