Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zapytanie wykluczające rekordy z danego przedziału daty
Forum PHP.pl > Forum > Bazy danych > MySQL
acztery
mam taką część zapytania:

.... (((home_start <= '".$time."' OR home_start = '".$time."') AND home_start != '0000-00-00') AND (home_stop > '".$time."' OR home_stop = '".$time."' OR home_stop = '0000-00-00')) ......


gdzie $time to aktualny czas w formacie 2011-04-11

Zapytanie wyżej pokazuję rekordy które spełnia wyznaczone kryteria tj (Są z tego przedziału dat)

I moje pytanie!

Potrzebuję to samo tylko tak żeby wykluczyć te zapytania (czyli nie pokazujemy w wynikach tych rekordów które spełniają te kryteria)


0000-00-00

Oznacza w przypadku home_stop nieskończoność jak by nie to to zapytanie pewnie było by krótsze. Przy okazji może ktoś zna lepszy sposób...

np pokaz rekordy od 2011-04-14 do 0000-00-00 czyli od daty początkowe aż do końca świata (można ustalić datę 9999-99-99 - ale to nie wchodzi w GRĘ )
cim
Witam,

jeżeli dobrze zrozumiałem to możesz spróbować czegoś takiego:
  1. SELECT ... WHERE $time NOT BETWEEN home_start AND home_stop

BETWEEN sprawdza czy data jest z podanego zakresu, a NOT odwraca ten warunek.

Pozdrawiam
acztery
home_start i home_stop to kolumny w bazie danych wiec na pierwszy rzut oka Twoja konstrukcja zapytania jest chyba źle.

chodzi o to ze np stronie głównej mamy listę nowych art i listę polecanych polecanych.

z tym, że jak jest polecane to nie może się wyświetlać w nowych... nie chce tu angażować crona... który mógł by ściągać flagę w bazie danych dla rekordu i po sprawie.

PS


BETWEEN działa chyba tak smile.gif podajemy nazwę kolumny i początek i koniec przedziału...

cim
Witam,

u mnie na MySQL Server 5.1.49 zapytanie napisane w taki sposób działa, jaki jest błąd u Ciebie?

Pozdrawiam
acztery
nie ma błędów ale zwraca zero rekordów. Całe zapytanie wygląda tak:

  1. SELECT * FROM modules_desc WHERE (2011-04-14 NOT BETWEEN home_start AND home_stop) AND (datepub <= '2011-04-14' AND (dateend > '2011-04-14' OR dateend='0000-00-00' OR dateend!='2011-04-14')) AND act=1 AND modules='1' GROUP BY id ORDER BY rating DESC LIMIT 8



czyli pokazujemy rekordy od 2011-04-14 do 2011-04-14 pomijając te z home_start i home_stop
cim
Witam,

dodaj cudzysłowy przy dacie:
  1. (2011-04-14 NOT BETWEEN home_start AND home_stop)


Pozdrawiam
acztery
dziala

a masz pomysl jak zrobic to

SELECT * FROM modules_desc WHERE ('2011-04-14' NOT BETWEEN home_start AND home_stop) AND ('2011-04-14' BETWEEN datepub AND dateend) AND act=1 AND modules='1' GROUP by id ORDER by datepub DESC LIMIT 8

mam rekord ustawiony ze dateend jest 2011-04-13 i sie wyswetla a nie powinno bo jest 2011-04-14 (to juz ogolne wyciaganie reordow)


POPRAWKA zwraca 0 rekordow!
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.