Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Problem z zapytaniem
Forum PHP.pl > Forum > Przedszkole
zaaap
Witam,
Przetwarzając dane z formularza aby wyfiltrować tylko okreslone wyniki natrafilem na problem.
Na poczatek struktura:

PRACOWNICY (ID_pracownik, imie, nazwisko)
POMIESZCZENIA (ID_pomieszczenie, nazwa)
LOGI (ID_logi, ID_pomieszczenie, ID_pracownik, data (timestamp))

W tabeli logi wrzucane są ID pracownika i ID pomieszczenia oraz data wrzucenia. Stworzylem zapytanie zeby wyciagnac okreslone dane, i np:
  1. SELECT pracownicy.imie, pracownicy.nazwisko, nazwa, zatrudniony, DATA
  2. FROM (
  3. SELECT ID_pracownik, ID_pomieszczenie, DATA FROM logi WHERE ID_pracownik =3
  4. ) log, logi, pracownicy, pomieszczenia
  5. WHERE pracownicy.ID_pracownik = log.ID_pracownik
  6. AND pomieszczenia.ID_pomieszczenie = log.ID_pomieszczenie

Tutaj działa ok.

Natomiast nie wiem jak to pożenić z datą, kiedy daje zapytanie jak poniżej wypluwa mi 12 wyników zamiast 2, czyli robi iloczyn kartezjanski, który nie wiem jak wyeliminować.
  1. SELECT pracownicy.imie, pracownicy.nazwisko, nazwa, zatrudniony, log.DATA
  2. FROM (
  3. SELECT ID_pracownik, ID_pomieszczenie, DATA FROM logi WHERE ID_pracownik =3 AND (DATA >= '1970-01-01 00:00:00' AND DATA <= '2012-12-31 00:00:00')
  4. ) log, logi, pracownicy, pomieszczenia
  5. WHERE pracownicy.ID_pracownik = log.ID_pracownik
  6. AND pomieszczenia.ID_pomieszczenie = log.ID_pomieszczenie


Macie jakieś pomysły?
gr56
Musisz najpierw przekonwertować czas do postaci unixowej za pomocą strtotime().
zaaap
Samo w sobie podzapytanie działa, więc nie wiem czy to problem, ale za chwile sprawdze. A na marginesie strtotime jest funkcja php, a jesli php nie uzywam?

Nic to nie dało i tak jak pisalem wczesniej:
  1. SELECT ID_pracownik, ID_pomieszczenie, DATA FROM logi WHERE ID_pracownik =3 AND (DATA >= '1970-01-01 00:00:00' AND DATA <= '2007-12-31 00:00:00')

Daje odpowiednią liczbę (1) wyników
athei
W swoim zapytaniu dodaj DISTINCT, czyli
  1. SELECT DISTINCT pracownicy.imie, pracownicy.nazwisko, nazwa, zatrudniony, log.DATA ...

albo użyj joinów
  1. SELECT pracownicy.imie, pracownicy.nazwisko, log.DATA
  2. FROM logi AS log
  3. INNER JOIN (pracownicy, pomieszczenia) ON (pracownicy.id_pracownik = log.id_pracownik AND pomieszczenia.id_pomieszczenie = log.id_pomieszczenie)
  4. WHERE pracownicy.id_pracownik = 3 AND (log.data>= '1970-01-01 00:00:00' AND log.data<= '2012-12-31 00:00:00')
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.