Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobranie z bazy (z dwóch tabel!) danych według daty
Forum PHP.pl > Forum > PHP
miedzna
Mam w bazie 2 tabeli:

  1. CREATE TABLE `tabela_jeden` (
  2. `id_jeden` int(11) NOT NULL AUTO_INCREMENT,
  3. `id_dwa` int(11) NOT NULL,
  4. `nr_ew` char(17) NOT NULL,
  5. PRIMARY KEY (`id_jeden`,`id_dwa`)
  6. );


oraz tabela:

  1. CREATE TABLE `tabela_dwa` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `id_dwa` int(11) NOT NULL,
  4. `ostatniPunkt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  5. PRIMARY KEY (`id`,`dane_uczestnika_id`)
  6. );


Chcę pobrać dane z tabeli "tabela_jeden", ale pod warunkiem, że pola "id_dwa" są równe w obu tabelach, a dodatkowy warunek, że pole "ostatniPunkt" (zawiera dane w formacie np 2008-01-02 08:23:18) nie jest starszy niż np jakaś tam data.

Robię coś takiego:

SELECT pz.id_jeden, pz.nr_ew FROM polec_zaplaty pz, punktacja p WHERE pz.id_dwa = p.id_dwa AND UNIX_TIMESTAMP(p.ostatniPunkt) <= UNIX_TIMESTAMP('2007-12-22 21:56:12') ORDER BY pz.id_jeden

... i zwraca mi wszystkie rekordy z bazy, jak próbuję zmieniać datę, to nic z tego sad.gif

gdzie jest błąd?
Cezar708
Cytat(miedzna @ 3.01.2008, 14:56:46 ) *
Robię coś takiego:

  1. SELECT pz.id_jeden, pz.nr_ew FROM polec_zaplaty pz, punktacja p WHERE pz.id_dwa = p.id_dwa AND UNIX_TIMESTAMP(p.ostatniPunkt) <= UNIX_TIMESTAMP('2007-12-22 21:56:12') ORDER BY pz.id_jeden


generalnie zakładając, że polec_zaplaty to tabela_jeden i punktacja to tabela_dwa to wszystko jest w porządku. Jeśli zwraca Ci wszystkie rekordy z bazy to oznacza, że wszystkie spełniają warunek zapytania...
miedzna
O to chodzi, że nie wszystkie, są bardzo różne daty z kilkumiesięcznymi odstępami, więc jak zmieniam datę, to ciągle jest taka sama liczba rekordów. Podejrzewam, że chodzi o UNIX_TIMESTAMP i format zapisu daty '2007-12-22 21:56:12', coś tu moim zdaniem nie gra, ale nie wiem co.
Cezar708
hmm, w zasadzie jeśli chcesz tylko porównać daty to nie musisz używać UNIX_TIMESTAMP, lub ewentualnie możesz sprawdzać tylko te, które mają daty (nie wiem czy jest Ci to potrzebne), na końcu możesz trochę zmienić zapytanie (kolejność warunków, choć nie wiem gdzie ile będzie danych)

sprawdź jak Ci pójdzie to:

  1. SELECT pz.id_jeden, pz.nr_ew
  2. FROM polec_zaplaty pz, punktacja p
  3. WHERE p.ostatniPunkt <> '' AND p.ostatniPunkt IS NOT NULL AND p.ostatniPunkt <= '2007-12-22 21:56:12' AND p.id_dwa = pz.id_dwa
  4. ORDER BY pz.id_jeden


w zasadzie również powinno zadziałać
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.