MySQL date_add
Here's a quick MySQL tip I wanted to throw your way. I created an event system a while back and one of the requirements of the system was to show events that happened yesterday forward, meaning events older than 2 days were to be hidden. MySQL's date_add will allow you to do just that:
The MySQL Example
SELECT title, venue, url, city, state, DATE_FORMAT(date_starts,\'%b %e\') as formatted_date
FROM events
WHERE date_starts >= DATE_ADD(NOW(), INTERVAL -1 DAY) // yesterday!
ORDER BY date_starts ASC
Note that I'm using a negative date value. You can use a positive date value to get tomorrow, next week, next month, etc..
I like the idea of showing events the from past few days -- they show that there's been action recently. Click here for more about MySQL date_add.
![Animated 3D Flipping Menu with CSS]()
CSS animations aren't just for basic fades or sliding elements anymore -- CSS animations are capable of much more. I've showed you how you can create an exploding logo (applied with JavaScript, but all animation is CSS), an animated Photo Stack, a sweet...
![CSS Animations Between Media Queries]()
CSS animations are right up there with sliced bread. CSS animations are efficient because they can be hardware accelerated, they require no JavaScript overhead, and they are composed of very little CSS code. Quite often we add CSS transforms to elements via CSS during...
![Create Custom Events in MooTools 1.2]()
Javascript has a number of native events like "mouseover," "mouseout", "click", and so on. What if you want to create your own events though? Creating events using MooTools is as easy as it gets.
The MooTools JavaScript
What's great about creating custom events in MooTools is...
![MooTools onLoad SmoothScrolling]()
SmoothScroll is a fantastic MooTools plugin but smooth scrolling only occurs when the anchor is on the same page. Making SmoothScroll work across pages is as easy as a few extra line of MooTools and a querystring variable.
The MooTools / PHP
Of course, this is a...
Or you can do it like this: date_starts >= NOW() – INTERVAL 1 DAY
Easier to read in my opinion :) Good tip! I do it like this quite often
I prefer using php function strtotime() because queries using MySQL functions like NOW() can’t be cached
@macol: Ohhhh, good tip!
Hmm good tip indeed, but… The queries still cannot be cached if you use something as dynamic as strtotime(‘now’), isn’t that right?
So using strtotime() does not enable the query to be cached? Or am I wrong?
strtotime() would only give you an advantage if the same query is run during the same second?
If you want caching to work, you can truncate the time part like this:
$yesterday = strtotime('-1 day'); $yesterday_str = date('Y-m-d 00:00:00', $yesterday);Then it’ll be good for the whole day. This has the added benefit of matching the logical meaning of “yesterday” rather than being precicely 24 hours ago.
@Jeremy Parrish: Why didnt I think of this? :) Thanks!
This query will not be used index.
@Niklas Berglund: your query must be deterministic – query might provide same result no matter how many times it is run, if data remains the same. So if your query uses non-deterministic functions such as NOW(), UUID(), RAND(), CONNECTION_ID() etc it will not be cached.
However, if you pass in a fixed value from PHP as in
SELECT * FROM logs WHERE logstamp = ”
it will be cached.
(the php function today() is just a one-liner that returns the current day in mysql format)
@Metric Stormtrooper: SELECT * FROM logs WHERE logstamp = ‘::php today() ::’
hm, cant post php syntax here, but you get the idea
Or you can use this: DATE_SUB(NOW(), INTERVAL 1 DAY)