RE: [PHP-WIN] a mysql query stuck for the last week ......
| From: | toby z | Date: | Fri, 23 May 2003 06:36:38 +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-20051@lists.php.net to get a copy of this message | ||
ok bat
i admit im an imbecile or how ever u spell it :(
i couldnt make ur query work :'(
i tried it the very way it was that is :
-------------------------------------------
select count (distinct tbl_chld_reg_400.child_id)
from tbl_chld_reg_400
WHERE dom BETWEEN dob
AND
convert(varchar,
convert(int,
convert(varchar,
substring(
1,4, convert(varchar,dob,112)
)
) + @FIVE_YEARS
) +
substring(5,4,convert(varchar,dob,112))
AND month(tbl_chld_reg_400.dom) = 1
and year(tbl_chld_reg_400.dom) = 2003
----------------------------------------------
then i modified it to fit what i fount at mysql.com
CONVERT(expression,type)
so i turned it to
select count (distinct tbl_chld_reg_400.child_id)
from tbl_chld_reg_400
WHERE dom BETWEEN dob
AND
convert(
convert(
convert(
substring(1,4, convert(varchar,dob,112)
),varchar
) + @FIVE_YEARS,
int) +
substring(5,4,convert(varchar,dob,112))
,varchar )
-------------------------------------------------------
:'(
what else can i do but to use my silly lil query:
(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))
:(
hmmm ?????
thnx a billion pal anywayz :)
pretty despaired
toby
--- "Svensson, B.A.T. (HKG)" <B.A.T.Svensson@lumc.nl> wrote: > In
addition I might add that "convert(varchar,dob,112)"
> shoudl create a string of the format "YYYMMDD HH:MM:mmm",
> where mmm are milli seconds so if you want the kid to be
> five year on stright on the second while you runt he query
> you might add this tail to they year five years a head in time:
>
> substring(5,10,convert(varchar,dob,112))
>
>
> That kind of query result will propbaly impress your boss
> if he know shit and nothing about SQL. ;)
>
> //Anders
>
> P.S. I am not 100% sure of the string format, but you should
> be able to find out excatly how to do the dateteme 2 string
> type converstion with the RDBMS you are using. D.S.
>
> -----Original Message-----
> From: Svensson, B.A.T. (HKG)
> To: 'toby z '; 'php-windows@lists.php.net '
> Sent: 22-5-03 23:13
> Subject: RE: [PHP-WIN] a mysql query stuck for the last week ......
>
> With a proper RDBMS you should be able to do something like this:
>
> select count (distinct child_id)
> from <you know>
> WHERE dom BETWEEN dob
> AND
> -- Create a year @FIVE_YEARS ahead in time
> convert(varchar,
> convert(int,
> convert(varchar,
> substring(
> 1,4, convert(varchar,dob,112)
> )
> ) + @FIVE_YEARS
> ) +
> -- add the month and day string to this new year string
> substring(5,4,convert(varchar,dob,112))
>
> AND <the extra stuff you might need>
>
> Written at home, so I could not test to see if the syntax
> is correct (might have mixed paranteses and so on), but
> basicaly you should be able to use "BETWEEEN x AND y"
> to solve the problem.
>
> Sorry for just teasing you before... ;)
>
>
>
>
> -----Original Message-----
> From: toby z
> To: Svensson, B.A.T. (HKG); php-windows@lists.php.net
> Sent: 22-5-03 19:03
> Subject: RE: [PHP-WIN] a mysql query stuck for the last week ......
>
> 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
>
> --
> 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