Widełki - daty - bardziej skomplikowane zapytanie

0

Witam!
Chcę stworzyć zapytanie (mysql) w którym:

  1. SELECTEM wybiore odpowiednie dane - to już zrobiłem
  2. sprawdzę, czy u.miasto = '[tu będzie zmienna w php'ie]' lub c.c_najblizej = '[tu będzie zmienna w php'ie]' - to również już mam
  3. pobieram 2 daty 'i.data' oraz 'i.data1' i teraz - ze skryptu w php pobieram kolejne 2 daty nazwijmy je 'data_php_1' i 'data_php_2' i chcę sprawdzić, czy zakres dat z bazy mieści się w datach, które pobieram z php (są one zapisane w formacie dd-mm-rrrr)
    I teraz zrobiłem tak:
SELECT i.data, i.data1, u.miasto, c.c_najblizej FROM `impreza` AS i
LEFT JOIN `club` AS c ON c.id_club = i.id_usr
LEFT JOIN `user` AS u ON  i.id_usr = u.id
WHERE u.miasto = '[tu będzie zmienna z php]' 
OR  c.c_najblizej = '[tu będzie zmienna z php]'
AND
(
(i.data BETWEEN data_php_1 AND data_php_2)
OR
(i.data1 BETWEEN data_php_2 AND data_php_2 )
)

jednak kod zwraca mi pusty wynik (zero rekordów)? Co może być przyczyną?

1

Bo zapewne z php masz tutaj jakieś stringi a nie coś co jest poprawnie odczytywane jako data?

0

Całkiem możliwe, ale jak sobie z tym poradzić?:)

0

ok, jednak ja i w bazie jak i w php przekazuje informacje w formacie dd-mm-yyyy czyli powinno być to interpretowane jako data, czy się mylę?
Dla testu wpisałem tymczasowo daty (z php'a) na stałe:

SELECT i.nazwa_imp, i.data, i.data1, u.miasto, c.c_najblizej FROM `impreza` AS i
LEFT JOIN `club` AS c ON c.id_club = i.id_usr
LEFT JOIN `user` AS u ON  i.id_usr = u.id
WHERE (u.miasto = 'opole' OR  c.c_najblizej = 'opole')
AND
(
STR_TO_DATE(i.data,'%d-%m-%Y') 
BETWEEN STR_TO_DATE('20-04-2013','%d-%m-%Y')
AND STR_TO_DATE('02-05-2013','%d-%m-%Y')
OR
STR_TO_DATE(i.data1,'%d-%m-%Y') 
BETWEEN STR_TO_DATE('03-05-2013','%d-%m-%Y')
AND STR_TO_DATE('03-05-2013','%d-%m-%Y')
)

Jednak nadal bez wyników?

1

Nadal masz drugi parametr STR_TO_DATE zły. Powinien być '%Y-%m-%d', albo skorzystaj z funkcji GET_FORMAT.

pozdrawiaMM

0

Ale przecież ja mam w bazie dane w formacie '%d-%m-%Y'(tabela typu string) więc w jaki sposób mam tego użyć? mogę prosić o przykład?

0

Ok poradziłem już sobie:

WHERE ( u.miasto =  '".$miescowosc."' OR c.c_najblizej = '".$miescowosc."')
	AND (
	STR_TO_DATE( i.data,  '%d-%m-%Y' ) BETWEEN STR_TO_DATE(  '".$dataout1."',  '%Y-%m-%d' ) AND STR_TO_DATE(  '".$dataout2."',  '%Y-%m-%d' ) 
	OR 
	STR_TO_DATE( i.data1,  '%d-%m-%Y' ) BETWEEN STR_TO_DATE(  '".$dataout1."',  '%Y-%m-%d' ) AND STR_TO_DATE(  '".$dataout2."',  '%Y-%m-%d' )
	)"

Dzięki w każdym razie za naprowadzenie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1