xander85 Posted January 22, 2008 Share Posted January 22, 2008 I wrote a query to select the sum of products ordered in each month over the past year. However, I want my query to be static and automatically update itself. I want to select the sum of each month and I'm using the following query: SELECT SUM( xcart_order_details.amount ) FROM xcart_orders LEFT JOIN xcart_order_details ON xcart_orders.orderid = xcart_order_details.orderid WHERE MONTH( FROM_UNIXTIME( date ) ) = '".$i."' AND period_diff( concat( ( left( curdate( ) , 4 ) ) , ( substr( curdate( ) , 6, 2 ) ) ), concat( ( left( FROM_UNIXTIME( date ) , 4 ) ) , ( substr( FROM_UNIXTIME( date ) , 6, 2 )))) <= '12' AND xcart_order_details.productcode = '".$_POST['productcode']."' The query takes the curdate() and converts its to the format: YYYYMM, and converts the date column (unix timestamp format) and converts it to YYYYMM and then calculates the difference between curdate() and date column (has to be <= 12, so it is within a year) and the first where condition selects where the month of the order is equal to 1,2,3,4.....12 (for all months). I'm using a for loop to change $i. This query seems very clumsy and there has to be an easier way to write this. Keep in mind I want it to be dynamic so I don't have keep changing the code on the page I wrote every month. Link to comment https://forums.phpfreaks.com/topic/87166-solved-easier-way-to-write-query-select-data-within-last-year/ Share on other sites More sharing options...
beebum Posted January 22, 2008 Share Posted January 22, 2008 Try this: ...WHERE MONTH( FROM_UNIXTIME( date ) ) = '".$i."' AND UNIX_TIMESTAMP(now()) - date <= 31536000; Link to comment https://forums.phpfreaks.com/topic/87166-solved-easier-way-to-write-query-select-data-within-last-year/#findComment-446145 Share on other sites More sharing options...
xander85 Posted January 22, 2008 Author Share Posted January 22, 2008 I want to be able to select each month from the past year: For example, from the current date I want: Jan 08, Dec 08, nov, oct, .... Then next month, shift everything forward one month. How would I go about doing this? Do I need twelve individual queries? My own concern is since each month isn't the same amount of days that a static value will not work and that is why I chose to use the period_diff function. Link to comment https://forums.phpfreaks.com/topic/87166-solved-easier-way-to-write-query-select-data-within-last-year/#findComment-446179 Share on other sites More sharing options...
beebum Posted January 22, 2008 Share Posted January 22, 2008 I thought you were using $I to specify the month. Link to comment https://forums.phpfreaks.com/topic/87166-solved-easier-way-to-write-query-select-data-within-last-year/#findComment-446189 Share on other sites More sharing options...
xander85 Posted January 22, 2008 Author Share Posted January 22, 2008 Whoops, I feel dumb. You're right. That should work great. Thanks! Link to comment https://forums.phpfreaks.com/topic/87166-solved-easier-way-to-write-query-select-data-within-last-year/#findComment-446266 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.