Wyszukiwanie w bazie przedziałów czasowych

Jak zdefiniować zapytanie do SQLa, tak, żeby znalazł mi wszystkie wpisy, ale z datą większą niż dziś.

@events = Event.find(:all, :order => "date ASC", :conditions => "date > #{Time.now}") 

nie działa

Spróbuj

@events = Event.find(:all, :conditions=>['date > ?', Time.now.to_date])

Samo Time.now zwraca cos takiego:

Fri Jun 02 17:58:55 BST 2006

Jesli twoja kolumna w bazie Mysql to date to oczekuje ona formatu YYYY-MM-DD.

Poza tym, staraj sie zawsze przekazywac paramatery do zapytania przez ?, to zapobiega SQL injection.

Dzięki. Akurat tu chyba nie trzeba stosować [‘date > ?’, Time.now.to_date] bo to nie są dane pochodzące z zewnętrznego formularza.

mineło 10 minut… :slight_smile:

Jednak nie działa. Przy takim warunku pokazuje mi wszystkie rekordy z tabeli. Nawet te zawierające datę 2000r.

a zerknij no do loga, jak wyglada zapytanie SQL. jak to nic nie pomoze, to podrzuc tu na forum to zapytanie. pewnie format daty jest jednak inny niz oczekuje baza.

Zapytanie wydaje się być poprawne. Jeśli zmienie nierówność na date < Time.now.to_date nie zwraca żadnego wyniku. Baza to MySQL 4.1

SELECT * FROM events WHERE (date > 2006-06-04) ORDER BY date ASC

[quote=owiecc]Zapytanie wydaje się być poprawne. Jeśli zmienie nierówność na date < Time.now.to_date nie zwraca żadnego wyniku. Baza to MySQL 4.1

SELECT * FROM events WHERE (date > 2006-06-04) ORDER BY date ASC [/quote]
nie jest poprawne. data powinna byc w apostrofach. tak to w SQL sa po prostu 2 odejmowania (-:

Super, działa.

@events = Event.find(:all, :order => "date ASC", :conditions => "date > \"#{Time.now.to_date}\"") 

[quote=owiecc]Super, działa.

@events = Event.find(:all, :order => "date ASC", :conditions => "date > \"#{Time.now.to_date}\"") [/quote]
ladniej bedzie tak:

@events = Event.find(:all, :order => 'date ASC', :conditions => %Q{date > "#{Time.now.to_date}"}) 

przepraszam, nie mogłem sie powstrzymać :slight_smile:

a jak od bierzacej daty odjac tydzien ?

Odjecie tygodnia:

1.week.ago

dodanie tygodnia:

1.week.from_now

Ladnie, prawda? :slight_smile:

[quote=hosiawak]Spróbuj

@events = Event.find(:all, :conditions=>['date > ?', Time.now.to_date])

[/quote]
Kolega forumowicz tez dobrze podal.
Uzycie ? zamyka takze apostrofami.

Tak, wiec

['date > ?', Time.now.to_date]

da nam poprawnie zamknieta date

date > '2006-06-04'