RE: [PHP-WIN] a mysql query stuck for the last week ......

From: Date: Thu, 22 May 2003 17:03:09 +0000
Subject: RE: [PHP-WIN] a mysql query stuck for the last week ......
References: 1  Groups: php.windows 
Request: Send a blank email to php-windows+get-20039@lists.php.net to get a copy of this message
o bat thnx so much :) i made a funct with a frnd this mornnin it only does this ((date_format("child_date_of_mortality", "%Y")) - (date_format("child_date_of_birth", "%Y") ) u no in seudo child_year_of_mortality - child_year_of_birth i had had it for tha last one week n had to report to my god-fo-saken boss u no :S anywayz tell me sumthin will u plz i no ive screwed it all fo myslf in the long term prospects of this query do u think it wont work ????? as the the client wants is a report based on child deaths between 1 and 5 years of life what do u say ????? thnx again :) toby --- "Svensson, B.A.T. (HKG)" <B.A.T.Svensson@lumc.nl> wrote: > > In psedue SQL: > > SELECT COUNT(*) > F0RM <your tables> > WHERE <some search conditions> > AND ((CHILD_DATE_OF_DEATH - CHILD_DATE_OF_BIRTH) + 2000YEARS) =< > 2005YEARS > > That's the way I would like to do it at a fist glance, but: > > This "CURRENT DATE - CHILD_BIRTHDATE" construction might be a pit > fall(?) > since date might have a minimum value <> 0, and therefor you might > need > to convert the age to numbers of day the kid has lived, eg. to an > integer, > before you do the calculation, eg: > > For instance if i ran this in MS SQL server: > > select getdate() - getdate() > > Then I get this answer: > > > --------------------------- > 1900-01-01 00:00:00.000 > > (1 row(s) affected) > > > Not really what I wanted, right.... > > The solution should the look something like this: > > SELECT COUNT(*) > F0RM <your tables> > WHERE <some search conditions> > AND INT_CHILD_NUMBERS_OF_LIFE_DAYS < NUMBERS_OF_DAYS_FOR_5_YEARS > > Since the kids has deceased the number of days it did live is fixed > and you > can without worry pre-calculate the numbers of days the kid has > been alive > and hence speed up the execution of the query (ain't redundancy > lovely > sometimes?) > > Secondly you have an additional problem; every forth year you'll > have an > extra day in February, so you need not compensate for each date > interval > a kid been born at. If you choose to do this dynamical then your > SQL code > will be pretty ugly... but > > ...this might be compensated by another pre-calculation that tells > how > many extra days there are in the time period the kid was alive, and > this does of course also requires an extra attribute in the tables > to. > > (If your RDBMS allows it, write a trigger that inserts these > numbers > automatically when ever data is inserted into the table, this way > nobody > will even notice a difference - that is if you wrote your inserts > properly > to begin with... ;) > > The benefits of these two extra columns (simplicity of the queries) > should outweigh the extra problem of maintenance cost for them. > > > Finally query might look something like this: > > SELECT COUNT(*) > F0RM <your tables> > WHERE <some search conditions> > AND CHILD_NUMBERS_OF_LIFE_DAYS < NUMBERS_OF_DAYS_FOR_5_YEARS + > COMPENSATION_VALUE > > or alternatively if you so wishes: > > SELECT COUNT(*) > F0RM <your tables> > WHERE <some search conditions> > HAVING CHILD_NUMBERS_OF_LIFE_DAYS < NUMBERS_OF_DAYS_FOR_5_YEARS + > COMPENSATION_VALUE > > > > -----Original Message----- > > From: toby z [mailto:blue_myth_1@yahoo.com] > > Sent: Wednesday, May 21, 2003 2:37 PM > > To: php-windows@lists.php.net > > Subject: [PHP-WIN] a mysql query stuck for the last week ...... > > > > > > hay guyz > > > > i ve been stuck with this query for the last whole week > > n i still cant get around it > > > > i have to count the number of child-deaths between the age of 1 > and 5 > > years > > > > > > in the query just below > > dob==date of birth > > dom==date of mortality > > child_id == the id assigned to a child at birth auomatically on > > entring his registration info > > loop_mon -> exes the query for the required number of months > selected > > by generator > > $yr = year supplied by generator > > gndr== gender of child (1 ==boy; 2== girl) > > tbl_chld_reg_400 == the child regestration table > > > > > > > ---------------------------------------------------------------------- > > function to calculate age: > > > > > > > > http://www.mysql.com/doc/en/Date_and_time_functions.html > > > > SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(dob, '%Y') - > > (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(dob, '00-%m-%d')) > > > > > > > > > ---------------------------------------------------------------------- > > > > if the above funct is right this query otta work:: > > > > > > SELECT count(distinct tbl_chld_reg_400.chld_id) > > from tbl_chld_reg_400 > > where month(tbl_chld_reg_400.dom) = $loop_mon > > and year(tbl_chld_reg_400.dom) = $yr > > and ((DATE_FORMAT('tbl_chld_reg_400.dom', '%Y') - > > DATE_FORMAT('tbl_chld_reg_400.dob', '%Y') > > - (DATE_FORMAT('tbl_chld_reg_400.dom', '00-%m-%d') < > > DATE_FORMAT('tbl_chld_reg_400.dob', '00-%m-%d'))) >=1) > > > > and ((DATE_FORMAT('tbl_chld_reg_400.dom', '%Y') - > > DATE_FORMAT('tbl_chld_reg_400.dob', '%Y') > > - (DATE_FORMAT('tbl_chld_reg_400.dom', '00-%m-%d') < > > DATE_FORMAT('tbl_chld_reg_400.dob', '00-%m-%d'))) <=5) > > and tbl_chld_reg_400.gndr='1' > > > > > > > ---------------------------------------------------------------------- > > > > but it doesnt ofcorce > > > > i ve been tryin all these but nuthin aint seem to be workin > ...... :S > > :| :[ > > > > > > > > /* $ftch_dta_rprt_qry = "select count(distinct > > tbl_chld_reg_400.chld_id) > > from tbl_chld_reg_400 > > where month(tbl_chld_reg_400.dom) = $loop_mon > > and > > > ((to_years(tbl_chld_reg_400.dom))-(to_years(tbl_chld_reg_400.dob)) > >= > > 1) > > and > > > ((to_years(tbl_chld_reg_400.dom))-(to_years(tbl_chld_reg_400.dob)) > <= > > 5) > > and year(tbl_chld_reg_400.dom) = $yr > > and tbl_chld_reg_400.gndr='2'"; > > */ > > > > > > > > > > /* > > $ftch_dta_rprt_qry = "SELECT count(distinct > > tbl_chld_reg_400.chld_id) > > from tbl_chld_reg_400 > > where month(tbl_chld_reg_400.dom) = $loop_mon > > and year(tbl_chld_reg_400.dom) = $yr > > and ((DATE_FORMAT('tbl_chld_reg_400.dom', '%Y') - > > DATE_FORMAT('tbl_chld_reg_400.dob', '%Y')) >=1) > > and ((DATE_FORMAT('tbl_chld_reg_400.dom', '%Y') - > > DATE_FORMAT('tbl_chld_reg_400.dob', '%Y')) <=5) > > and tbl_chld_reg_400.gndr='1' "; > > */ > > > > > > > > /* > > $ftch_dta_rprt_qry = "SELECT count(distinct > > tbl_chld_reg_400.chld_id) > > from tbl_chld_reg_400 > > where month(tbl_chld_reg_400.dom) = $loop_mon > > and year(tbl_chld_reg_400.dom) = $yr > > and ((TO_DAYS(year(tbl_chld_reg_400.dom)) - > > TO_DAYS(year(tbl_chld_reg_400.dob))) >= 1) > > and ((TO_DAYS(year(tbl_chld_reg_400.dom)) - > > TO_DAYS(year(tbl_chld_reg_400.dob))) <= 5) > > and tbl_chld_reg_400.gndr='1' "; > > //TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30; > > */ > > > > > > > > /* > > $ftch_dta_rprt_qry = "SELECT count(distinct > > tbl_chld_reg_400.chld_id) > > from tbl_chld_reg_400 > > where month(tbl_chld_reg_400.dom) = $loop_mon > > and year(tbl_chld_reg_400.dom) = $yr > > and ((year(tbl_chld_reg_400.dom) - year(tbl_chld_reg_400.dob)) > >= 1) > > and ((year(tbl_chld_reg_400.dom) - year(tbl_chld_reg_400.dob)) > <= 5) > > and tbl_chld_reg_400.gndr='1' "; > > */ > > > > > > /* > > $ftch_dta_rprt_qry = "SELECT count(distinct > > tbl_chld_reg_400.chld_id) > > from tbl_chld_reg_400 > > where ((year(tbl_chld_reg_400.dom) - year(tbl_chld_reg_400.dob)) > <= > > 1) > > and tbl_chld_reg_400.gndr='1' "; > > */ > > > > > > ----------------------------------------- > > > > > > > > can anyone hlp plz > > > > cuz im about to bang me head in the wallz ....... > > > > thnx a million > > > > desprete as ever > > > > toby ...... > > > > > > __________________________________________________ > > It's Samaritans' Week. Help Samaritans help others. > > Call 08709 000032 to give or donate online now at > http://www.samaritans.org/support/donations.shtm > > > > -- > > PHP Windows Mailing List (http://www.php.net/) > > To unsubscribe, visit: http://www.php.net/unsub.php > > __________________________________________________ It's Samaritans' Week. Help Samaritans help others. Call 08709 000032 to give or donate online now at http://www.samaritans.org/support/donations.shtm

« previous php.windows (#20039) next »