Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Pytanie o okresy (zbiory)
Forum PHP.pl > Forum > Przedszkole
8_pasarzer_NOSTROMO
Witam

Od kilku dni mam zaćmę umysłową i nie potrafię zrobić prostej rzeczy, a mianowicie:

Mam bazę danych :

nazwisko | od | do
kowalski 2011-03-03 2011-03-06
nowak 2011-03-06 2011-03-16

Mam formularz w którym wybieramy dwie daty (okres od - do). Interesuje mnie pytanie, które ustali mi kto w wybranym przez formularz okresie był na zwolnieniu. Np. jeśli wybiore od 1.03-20.03 to byli oboje a jeśli np. od 4.03 do 5.03 to był tylko kowalski. A z kolei od 4.03 do 07.03 to też byli oboje.

No kombinowałem już na 20 sposobów i za grzyba nie idzie. albo wyskakuje jeden albo drugi albo oboje, ale zawsze jest błąd gdy zbiory dat się pokrywają. Sprawa jest banalna ale nie daje rady.
Ogólnie stosowałem w pytaniu warunek
  1. where (od<='$_od' && do>='$_do')

w różnych konfiguracjach, ale zawsze gdzieś źle pokazał. Pomocy, lub choć wskazówkę

kefirek
  1. WHERE od >= ".$_od'." AND od <= ".$_do."
8_pasarzer_NOSTROMO
Sprawdzę jutro w robocie i dam znać, ale dzieki z góry.

@ kefirek

WHERE od >= ".$_od'." AND od <= ".$_do." . Nie pomogło kurde

Wybierając okres od 4.03-6.03. Wyświetla tylko jedną osobę, a w tym czasie byli oboje.

3.03 >= 04.03 AND 06.03 <= 6.03 Tego nie pokazuje

Pomocy !
wojciech_b
Rozumiem, że chcesz wybrać osoby, których urlop "przecina się" z okresem podanym w formularzu? Jeśli tak, to imho trzeba sprawdzić dwa warunki:

1. czy od lub do jest w przedziale podanym przez formularz
2. czy przedział podany przez formularz zawiera sie w od-do

$_od = '2011-03-04';
$_do = '2011-03-06';

  1. SELECT * FROM nazwa_tabelki WHERE (od BETWEEN $_od AND $_do) OR (do BETWEEN $_od AND $_do) OR (od <= $_od AND do >= $_do)




pisane z palca i nie testowane, mam nadzieję, że pomoże
Valdi_B
Doprecyzuj określenie "kto w wybranym przez formularz okresie był na zwolnieniu".
Możliwość 1: Kto przez cały podany okres był na zwolnieniu.
Możliwość 2: Kto w dowolnym dniu podanego okresu był na zwolnieniu.

Skoro piszesz "od 4.03 do 07.03 to też byli oboje" a Nowak był na zwolnieniu od 6.03, to raczej wariant 2, ale chciałbym się upewnić.

Rozwiązanie Kefirka wyciągnie tylko tych, którzy "w żadną stronę nie wystawiali" poza podany okres.

Rozwiązanie Wojtka_B (wygląda na dobre) obejmuje 3 możliwości:
- od <= $_od AND do >= $_do - tych którzy "wzięli okrakiem" podany okres (zaczęli wcześniej lub w dniu pocz., a skończyli później lub w dniu końcowym)
- od BETWEEN $_od AND $_do - zaczęli w podanym okresie (koniec - nieważny),
- do BETWEEN $_od AND $_do - skończyli w podanym okresie (początek - nieważny).
8_pasarzer_NOSTROMO
@ wojciech_b

Dzięki wielkie, jesteś wielki ! Działa jak złoto.
Podaje prawidłowy kod dla potomnych:

  1. SELECT * FROM nazwa_tabelki WHERE (od BETWEEN '$_od' AND '$_do') OR (do BETWEEN '$_od' AND '$_do') OR (od <= '$_od' AND do >= '$_do')


Wciskam pomógł bez wahania.

@ Valdi_b

wojciech_b mnie dobrze zrozumiał, chodziło mi o okresy przecinające się w datach jakie wybierasz w formularzu.

Jeszcze raz dziękuje wszystkim za pomoc, w tak błahej sprawie.
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.