Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mysql] Zapytanie, wyświetlenie tylko z danego miesiąca
in5ane
post
Post #1





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

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


Hi,
chciałem spytać jak zrobić zapytanie, aby pokazywało mi dane tylko z danego miesiąca, a mianowicie jeżeli mamy wrzesień, to żeby wyświetlało tylko dane z września.

  1. <?php
  2. $query = "SELECT * FROM page_news WHERE status = '2' ORDER BY id DESC";
  3. ?>


Datę w bazie mam przykładowo tak: 20.09.2007, 22:42:30 w polu text.


Z góry dziękuję za pomoc.


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
Daimos
post
Post #2





Grupa: Zarejestrowani
Postów: 1 319
Pomógł: 118
Dołączył: 26.11.2003
Skąd: Lublin

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


bez sens zapisywac date w postaci tekstowej, jesli juz to int i za pomoca funkcji time(), a jak nie to date mysql wstawic
teraz to musisz rozbijac to za pomoca explode i wogole kupa roboty, serwer nie nadazy
popraw to lepiej, jak zapiszesz date np. za pomoca funkcji time to pozniej mozesz ja wyswietlac w taki sam sposob


--------------------
scriptun.com. Startup z poradnikami do gier ttp.zone i ttpzone.pl
Go to the top of the page
+Quote Post
in5ane
post
Post #3





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

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


No i powiedzmy, że teraz mam datę np. taką w bazie w polu INT: 1191302400

I teraz jak mam zrobić, żeby wyświetlić tylko newsy z tego miesiąca, który właśnie jest?


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
Daimos
post
Post #4





Grupa: Zarejestrowani
Postów: 1 319
Pomógł: 118
Dołączył: 26.11.2003
Skąd: Lublin

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


przy wyswietlaniu rekordow, sprawdzasz miesiac:
  1. <?
  2. $time='12234234345'; // przyklad ;) tutaj czas z time()
  3. $miesiac = date('m', $time);
  4. if($miesiac==date('m'){ // tutaj sprawdza czy miesiac jest jak bierzący
  5. // wyswietlaj
  6. }
  7. ?>


--------------------
scriptun.com. Startup z poradnikami do gier ttp.zone i ttpzone.pl
Go to the top of the page
+Quote Post
in5ane
post
Post #5





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

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


Dzięki smile.gif

@edit: Zrobiłem i trochę nie za bardzo działa tongue.gif

W bazie mam dwa newsy o datach:
1171002000 - 20.10.2007, 07:20:15
oraz
1190265615 - 20.9.2007, 07:20:15

  1. <?php
  2. $query = "SELECT * FROM page_news WHERE status = '2' ORDER BY id DESC LIMIT 10";
  3. $result = mysql_query($query);
  4. $num_rows = mysql_num_rows($result);
  5. $i=1;
  6. while ($row = mysql_fetch_array($result)) {
  7. $miesiac = date('m', $row[data_dodania]);
  8. if($miesiac = date('m')) {
  9. echo '<p>
  10. <strong>'.$row[tytul].'</strong><br />';
  11. echo date('m.d.y, H:i:s', $row[data_dodania]);
  12. echo '<br />Autor: <a href="forum/profile.php?mode=viewprofile&u='.$row[autor].'">'.$row[autor].'</a><br /><br />
  13. <table><tr><td valign="top">
  14. <img src="'.$row[miniaturka].'"></td>
  15. <td valign="top" style="color: #007981; font-size: 10pt; font-family: Verdana;">
  16. '.$row[tresc].'
  17. </td></tr></table>
  18. </p>';
  19. if ($num_rows != $i) {
  20. echo '<br /><hr style="border: none; width: 100%; height: 1px; background-color: #6e7a7b;" /><br />';
  21. }
  22. $i++;
  23. }
  24. }
  25. ?>


Ten post edytował in5ane 2.10.2007, 19:40:30


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
Cienki1980
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


Zamiast sprawdzać datę na poziomie php sprawdzaj ją w poziomie bazy poprzez dobrze stworzone zapytanie.

Skoro masz zapisany timestamp w postaci INT to wykorzystaj coś takiego:
- sprawdzasz jaki masz aktualnie miesiac
- sprawdzasz ile miesiac ma dni
- generujesz znacznik czasu dla 1szego danego miesiaca ( czyli mktime(0,0,0,$miesiac,1,$rok) )
- generujesz znacznik czasu dla ostatniego danego miesiaca
- tworzysz zapytanie do bazy
- wyswietlasz rekordy.


--------------------
404
Go to the top of the page
+Quote Post
in5ane
post
Post #7





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

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


Nie bardzo to rozumiem:
- generujesz znacznik czasu dla 1szego danego miesiaca ( czyli mktime(0,0,0,$miesiac,1,$rok) )
- generujesz znacznik czasu dla ostatniego danego miesiaca
Zrobiłem to tak:
  1. <?php
  2. $znacznik1 = mktime(0,0,0,$dni_miesiac,1,date('Y'));
  3. $znacznik2 = mktime(0,0,0,$dni_miesiac,12,date('Y'));
  4. ?>


I druga rzecz, jak z tego stworzyć zapytanie?


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
Cienki1980
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


A czego tu nie rozumieć questionmark.gif

Poza faktem, że znaczniki które stworzyłeś to znaczniki pierwszego i dwunastego dnia miesiąca określonego w zmiennej $dni_miesiac.

Zakładając, że miesiąc dostajesz z formularza w postaci cyfr z zakresu 1-12 ( styczeń - grudzień ) i chcesz pokazać newsy z dni od 1 do ostatniego dnia wybranego miesiąca wykonujesz następujące czynności:
- obliczasz znacznik czasu dla pierwszego dnia wybranego miesiąca - czyli mktime" title="Zobacz w manualu PHP" target="_manual // sprawdź jaka jest kolejność parametrów w tej funkcji
- sprawdzasz ile dni ma dany miesiąc - date" title="Zobacz w manualu PHP" target="_manual z odpowiednim parametrem
- wartość z poprzedniego kroku wstawiasz do mktime i obliczasz znacznik czasu ostatniego dnia miesiąca
- tworzymy zapytanie ... skoro data wpisania newsa to też znacznik czasu w postaci INT to po prostu sprawdzasz czy data wpisania newsa jest >= od znacznika_start i czy jest <= od znacznika_stop ... albo jakoś tak tongue.gif ( liczy się zasada a dokładnie wyjdzie w testach ) Działać działa poprawnie bo sam korzystałem tak w jakiejś aplikacj.


--------------------
404
Go to the top of the page
+Quote Post
Inzabi
post
Post #9





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 2.10.2007
Skąd: Wrocław

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


Nie wiem po co wyciągasz wszyskie rekordy z bazy, skoro potrzebujesz tylko z danego miesiąca. Mając date w postaci DATETIME
Kod
$miesiac = date('m');
$query = "SELECT * FROM page_news WHERE status = '2'  AND MONTH(datadodania) = $miesiac ORDER BY id DESC LIMIT 10";


Ten post edytował Inzabi 3.10.2007, 13:31:55
Go to the top of the page
+Quote Post
in5ane
post
Post #10





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

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


No coś to nie bardzo działa, popróbuje jednak cienkiego smile.gif


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
--phpion.com--
post
Post #11





Goście







Inzabi dobrze prawi! Poczytaj o [url="http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html"MySQL 5.0 Reference Manual :: 11.6 Date and Time Functions[/url]. Wybieranie wszystkich rekordów i sprawdzanie daty w PHP jest po prostu absurdalnie bez sensu...
Go to the top of the page
+Quote Post
in5ane
post
Post #12





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

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


Czy to jest tylko do PHP5 i MySQL5 ?
Bo jeżeli tak, no to jednak będę musiał zrobić tak jak cienki podał.


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
Inzabi
post
Post #13





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 2.10.2007
Skąd: Wrocław

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


PHP nie ma nic do zapytań SQL i działa to też na starszych wersjach.
http://dev.mysql.com/doc/refman/4.1/en/dat...#function_month
Go to the top of the page
+Quote Post
in5ane
post
Post #14





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

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


Zrobiłem tak:
  1. <?php
  2. $miesiac = date('m');
  3. $query = "SELECT * FROM page_news WHERE status = '2' AND MONTH(data_dodania) = $miesiac ORDER BY id DESC";
  4. ?>

i nie śmiga.. nic nie pokazuje.

Takie mam daty w bazie:
1191449216 i 1191449093


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
Inzabi
post
Post #15





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 2.10.2007
Skąd: Wrocław

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


Pisałem, że to zadziała tylko dla formatu DATE, DATETIME.

W twoim przypadku musisz zrobić konwersję

  1. <?php
  2.  $miesiac = date('m');
  3.  $query = "SELECT * FROM page_news WHERE status = '2' AND MONTH(FROM_UNIXTIME(data_dodania)) = $miesiac ORDER BY id DESC";
  4.  ?>
Go to the top of the page
+Quote Post
in5ane
post
Post #16





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

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


Nadal nie idzie, chociaż teraz wyświetla rekordy, ale wszystkie.
Daty mam takie:
04.10.2007, 00:04:53 - 972086460
21.10.2000, 02:01:00 - 1191449093


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
Inzabi
post
Post #17





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 2.10.2007
Skąd: Wrocław

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


Widzę że nie przejrzałeś treści pod linkami, które ci podaliśmy, tam masz wszystko.

To samo co zrobiłeś z MONTH zrób dla YEAR.
Go to the top of the page
+Quote Post
in5ane
post
Post #18





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

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


Dzięki smile.gif


--------------------
> > > Tworzenie stron < < <
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 Aktualny czas: 19.08.2025 - 16:04