I’m creating a jquery based web graph that displays weather data. The data is loaded via Ajax -> PHP -> MySQL. The MySQL database contains a record of various parameters for each minute for the last 10 years… (So a HUGE amount of records). I want users to be able to generate a graph for a custom date range, but limit the number of data I pull for date ranges longer than a few days. Ie, if they query for a weeks worth of data, my php code should return only 1 data value per hour.
I don’t want to do any averaging, or server side processing of that sort – I want to retrieve only every nth record from mysql – so that I get a manageable amount of data.
My problem is, my database doesn’t have a record number field, and I CANNOT MODIFY the format of the database. Is there a way that I could do this based on the actual date values? Like say cast to unix timestamp, then only select the record if the date is divisible by some number? (I would calculate the number based off of the length of the time range, to pull a fixed number of points)
Any thoughts on good ways to do this? If there was a solution that would allow me to directly select even time intervals, that would be ideal. (ie. every 5 minutes, 10 minutes, 1 hr, 5 hrs, etc.)
EDIT: the field is MySQL dateTime format!! Thanks for asking for the clarification!
You could use the MOD() and UNIX_TIMESTAMP() functions in your SQL WHERE clause
SELECT * FROM WEATHER WHERE MOD(UNIX_TIMESTAMP(Time), Divisor) = 0Will get you only records with Times that are divisible by Divisor. The Divisor would be whatever time increment you’d like to grab data for (300 for every 5 minutes, 5400 for every 1.5 hours, etc.).
Since UNIX Time uses a 32 bit int, your standard INT data type in MySQL will do just fine.