Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] DATETIME operowanie na danych
Forum PHP.pl > Forum > Przedszkole
poczatkujacy99
Witam,


Mam problem taki mam bazę i w niej wpisy. Każdy wpis jest informację typu DATETIME kiedy został dodany. Chciałbym aby skrypt wyświetlił mi wszystkie dzisiejsze wpisy, po naciśnięciu np. +1 lub -1 wyświetlił wpisy z dnia poprzedniego lub dnia następnego. (próbowałem na CURDATE() i NOW() ale nie działa)

Inny problem to By wyświetliło 3 wydarzenia poprzednie, 1 trwające i 3 wydarzenia następne. (W bazie jest data_poczatek i data_koniec) Tu pewnie dałbym sobie radę, ale gdyby dało się DATETIME przerobić na uniksowy znacznik czasu wtedy od data_poczatek wyswietlam wydarzenia o < liczbie sekund od niej, a potem, a z drugiej strony wyswietlam wydarzenia o wiekszej liczbie sekund. Trwające to takie, gdzie aktualny czas jest pomiędzy data_poczatek a data_koniec. Nie wiem czy dobrze kombinuje. Ale nie wiem jak DATETIME tak przerobić i aktualną datę.
Shido
Opcje widze 2.

1/
Jak sądze Date dodaje automatycznie baza danych, nie znam się na operacjach na takiej dacie, więc osobiscie pozbyłbym się tego, a date dodawał skryptem np takim:
  1. $d = date("d");
  2. $m = date("m");
  3. $r = date("Y");
  4. $tsa = mktime(0, 0, 0, $m, $d, $r);

Wtedy oleje ci godziny i wyszukiwanie z danego dnia zrobisz jedynie porównując to co masz w bazie z lekko zmodyfikowanym tym samym skryptem.

2/
Jeżeli zalezy ci na godzinach, to opcja druga opcja jest taka, żeby napisać skrypt który:
- obliczy o której zaczał się dzień
- obliczy o której skończy(ł) się dzień
i wyciągnął z bazy przy pomocy:
  1. `data` >= '$data_start' AND `data` <= '$data_koniec'
poczatkujacy99
Zrobiłem to tak:
  1. $d = date("d");
  2. $m = date("m");
  3. $r = date("Y");
  4. $start = mktime(0,0,0,$m,$d,$r);
  5. $stop = mktime(23,59,59,$m,$d,$r);
  6. echo $start;
  7. echo ("<br><br>");
  8. echo $stop;
  9. echo ("<br><br>");
  10. echo date("F j, Y, g:i a", mktime(0,0,0,$m,$d,$r));
  11. echo ("<br><br>");
  12. echo date("F j, Y, g:i a", mktime(23,59,59,$m,$d,$r));
  13. $result=mysql_query("select * from wpisy order by id WHERE `date` >= '$start' AND `date` <= '$koniec'", $conn);


niżej kod wyświetlający, ale nie dałem go bo działa dobrze. I teraz jaki do daje efekt?
Cytat
1340920800

1341007199

June 29, 2012, 12:00 am

June 29, 2012, 11:59 pm

Czyli przedział jest dobry, a w bazie na pewno są dzisiaj jakieś wpisy. W bazie data jest przechowywana jako DATETIME. Dlaczego mimo to nie wyświetliło ani jednego wpisu?
Shido
Sprawdziłem teraz jak dokładnie wyglada ten format Datatime i wyszło mi że to coś takeigo: 2012-06-29 12:15:00

Więc w tym przypadku zrób tak:
  1. $d = date("d");
  2. $m = date("m");
  3. $r = date("Y");
  4. $data = $r.'-'.$m.'-'.$d;
  5. $result=mysql_query("SELECT * FROM wpisy ORDER BY id WHERE `date` LIKE '$data%'", $conn);

Sądze że to powinno zadziałać.
Bo wyszukujesz w tabeli wszystkiego co zaczyna sie zmienną data czyli na dziś: 2012-06-29
poczatkujacy99
Cytat
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `date` LIKE '2012-06-29%' ' at line 1


Taki błąd wyskakuje.
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.