Working through someone elses lovely Legacy code I've come to this MySQL statement that seems a bit odd. So this blog is about trying to understand it. Which by the way ultimately I don't. If you do and can explain it to me better than these notes then let me know :) After this blog I will be going away and trying prove it is wrong - so please check future posts.
SELECT pay_rate, LEFT(TIMEDIFF('24:00:00',TIMEDIFF(start_time, end_time)),5) AS hours, hours_only FROM shifts WHERE (employee_id = '160' AND shift_date BETWEEN '2010-11-12' AND '2010-11-18') OR (employee_id = '160' AND postdate_staff_invoice = '2')
SELECT pay_rate, // we only looking to return 1 field
LEFT // check here for 'LEFT' explained - http://www.roseindia.net/sql/mysql-example/mysql-left.shtml -
take this example mysql> SELECT left ('GirishTewari',6)as LeftString;
this means that in this example we're taking the first charcters of this result
TIMEDIFF('24:00:00',TIMEDIFF(start_time, end_time))
#########
So what does
TIMEDIFF('24:00:00',TIMEDIFF(start_time, end_time))
mean. Well
TIMEDIFF() returns expr1 – expr2 expressed as a time value. expr1 and expr2 are time or date-and-time expressions, but both must be of the same type.
* in this example the second expression will be calculated from the row from the database we're in.
AS - I normally use this after calling FROM as a form of shorthand ie
FROM tableOne AS t1
#################
WHERE (employee_id = '160' AND shift_date BETWEEN '2010-11-12' AND '2010-11-18') OR (employee_id = '160' AND postdate_staff_invoice = '2')
Well at least this makes more sense - except for what's after the 'OR'
To be honest this mysql looks all wrong. I think the next stage is to find out what result we're expecting. IS IT JUST TO FIND OUT THE PAY RATE !!
//////////
Here's some searches I've made in looking for answers.
MYSQL LEFT EXPLAINED
No comments:
Post a Comment