Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] Problem z zapytaniem
zaaap
post 27.12.2012, 19:03:46
Post #1





Grupa: Zarejestrowani
Postów: 106
Pomógł: 0
Dołączył: 13.11.2008

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


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?

Ten post edytował zaaap 27.12.2012, 19:05:12
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
gr56
post 27.12.2012, 19:15:24
Post #2





Grupa: Zarejestrowani
Postów: 77
Pomógł: 15
Dołączył: 19.11.2011

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


Musisz najpierw przekonwertować czas do postaci unixowej za pomocą strtotime().
Go to the top of the page
+Quote Post
zaaap
post 27.12.2012, 19:34:49
Post #3





Grupa: Zarejestrowani
Postów: 106
Pomógł: 0
Dołączył: 13.11.2008

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


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

Ten post edytował zaaap 27.12.2012, 19:50:34
Go to the top of the page
+Quote Post
athei
post 27.12.2012, 22:12:36
Post #4





Grupa: Zarejestrowani
Postów: 389
Pomógł: 141
Dołączył: 11.04.2009

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


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')


Ten post edytował athei 27.12.2012, 22:13:15
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 Wersja Lo-Fi Aktualny czas: 14.07.2025 - 06:44