Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyciąganie newsów z danego miesiąca...
Forum PHP.pl > Forum > PHP
marekk
Chciałbym się dowiedzieć jak rozwiązać taka sytuację. Mam newsy przechowywane w bazie i głównym wyznacznikiem jest data w formacie znacznika czasu czyli ogolnie system newsow. Powiedzmy, że tych newsów jest sporo i chciałbym wyciągać je w róznych miejscach strony np. z danego miesiąca jakiegos konkretnego roku.
Wiem, że można wszystkie wyciągać po kolei i sprawdzać czy miesiąc i rok jest tym miesiącem i rokiem co chcę wyświetlić ale jak wiadomo rozwiazanei troche bes sensu bo musi wtedy przeszukiwac cała baze i trzeba czekać na wyniki.

Mam jeszcze 2 pomysł ale tez nie idealny i trzeba się z nim bawić a mianowicie np. wyciaganie danych z 1 miesiaca w przód i w tył danego roku i pozniej przy wyświetlaniu wykluczanie zbędnmych wpisów. Z tym, że i tutaj wyciagnie troche wiecej danych niz trzeba, nie mówiąc o babraniu ze znacnzikiem.
Mam pytanie czy nie da się tego jeszcze jakos prościej rozwiązac, moze besposrednio przez 1 instrukcje do bazy, na pewno ktos już przerabiał podobne rzeczy??
scanner
marekk.. nie dobijaj.. pokaz strukture tabeli z newsami. Robisz to wszystko jednym zapytaniem. Tylko trzeba pomyslec troche..
slaug
Dokładnie poczytaj troche o select, przecież po to stworzyli SQLa, żeby takich problemów nie było smile.gif)
marekk
No tak ale jak wyciagnąc to 1 zapytaniem z konkretnego misieaca i roku??

Tabele mam normalna jak ponizej:

id int(11)
temat text
tekst text
zdjecie text
data int(30)
zrodlo varchar(120)

Ok. moge zmaienić sobie miesiąc i rok na znacnzik czasu ale jak pozniej wyodrębnic w zapytaniu dokladny przedzial danego miesiąca? Przeciez nie mozna instrukcji date czy mktime władowac besposrendio w zapytanie sqla?
scanner
ale mozeszw php okreslona datę zamienić na znacznik czasu i tenże wpakowac do SQL'a...
marekk
No i ja tak robię - w administracji ładuje np.:

$data = mktime($godz,$min,$sek,$mies,$dzien,$rok);

mysql_query("INSERT INTO aktualnosci (id,temat,tekst,zdjecie,data,zrodlo,dzial) VALUES (null,'$temat','$tekst','$zdjecie','$data','$zrodlo','$dzial')",$link);

I teraz na stronie mam powiedzmy podział na lata i miesiące no i powiedzmy, że chce wyciągnac newsy z marca 2000 roku:

no to robie wywołanie:

$data = mktime(0,0,0,03,1,2000);

mysql_query("SELECT * FROM aktualnosci WHERE data='$data')",$link);

No tylko wtedy mam z pierwszego dnia.
Hehh tylko nie mow, że to proste wyciągniecie o którym myślisz polega na zdefiniowaniu wyciągania z każdego miesiąca osobno czyli np.

// dla marca
$data1 = mktime(0,0,0,03,1,2000);
$data2 = mktime(0,0,0,03,31,2000);

i pozniej w zapytaniu wyciagneicie daty z tego przedziału??

Bo jeśli tak to ok. rozumiem tyle, że trzeba przejechac wszytskie miesiące...
scanner
[php:1:3e8429845d]<?php
$data1 = mktime(0, 0, 0, $mies, 1, $rok);
$data2 = mktime(23, 59, 59, $mies, date('t', $data1), $rok);
?>[/php:1:3e8429845d]
[sql:1:3e8429845d]SELECT * FROM aktualnosci WHERE data BETWEEN $data1 AND $data2[/sql:1:3e8429845d]
marekk
Hmm no cóż działa bez zarzutu smile.gif - wielkie dzięki.

Ale prawdę mówiąc to ciężko było wpaść na takie rozwiązanie, o ile jeszcze z tym parametrem "t" przy funkcji "date" powinienem wiedzieć o tyle liczby "...23, 59, 59..." przy mktime cięzko było wyczaić, nawet w manualu nie ma o tym wzmianki. Rozumiem, że one sa istotne i jakos okreslają skąd dokladnie liczyc czy cos w tym stylu skoro "t" odpowiada za liczbe dni w danym miesiącu?
BzikOS
Funkcja mktime() jest dosyć dokładnie opisana w manualu. Liczby 23 59 59 to po prostu godzina 23:59:59 - aby również newsy z ostatniego dnia miesiąca zawierały się w przedziale.
marekk
upss... no tak dzieki raz jeszcze za pomoc.
scanner
Cytat
Hmm no cóż działa bez zarzutu smile.gif - wielkie dzięki.
Pisane z palca
Cytat
Ale prawdę mówiąc to ciężko było wpaść na takie rozwiązanie
Elementarne drogi Watsonie.Sam napisałeś:
Cytat
[php:1:2717f46643]<?php
$data = mktime($godz,$min,$sek,$mies,$dzien,$rok);
?>[/php:1:2717f46643]
pierwsze trzy zmienne.. A do tego spojrzenie na zegarek..
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.