On Thu, 31 Jan 2002, DL Neil wrote:

> Garry,
> I regret to say that I can't see an immediate answer.
> 
> > CREATE TABLE breeding (
> >   rec SMALLINT(4) UNSIGNED AUTO_INCREMENT,
> >   sire SMALLINT(4) UNSIGNED,
> >   dam SMALLINT(4) UNSIGNED,
> >   paired DATE,
> >   split DATE,
> >   num_offspring TINYINT(1) ZEROFILL,
> >   PRIMARY KEY (rec)
> > );
> >
> > >
> > First, we define if a pair was breeding for a given date by seeing if that
> > date lies between the paired date and the split date. In mysql:
> >
> > SELECT FROM breeding WHERE TO_DAYS(paired) <= TO_DAYS('$given_date') AND
> > TO_DAYS('$given_date') <= TO_DAYS(split);
> 
> There is no need to use TO_DAYS() because paired and split are both
> dates so you can operate on them directly. I recommend that you take a
> look at the manual's section on Time and Date Functions.
> 

You are right. I works without the TO_DAYS(). But I did get them from the 
manual :-)

> > Where it gets messy is this has to be put into a loop, between the given
> > start and end dates (year and month only). For each day in the loop, I
> > have to do a query and count the number returned to php. Then average that
> > figure for the month.
> 
> So if I understand correctly, you are thinking in terms of a 'result
> table' which would (ideally) have the days 1-28/29/30/31 in the
> left-hand column, and the number of pairs who were put together on
> that day (paired <= day/date <= split). Then at the bottom you want to
> sum the right-hand column and divide it by the number of days in the
> month to give some sort of average mating possibilities per day. Does
> that sound right?
> 

Basically for statistical reasons I need average pairs per month, just a 
single number. But the months/years to be queried on would be input via a 
form. I was thinking of generating the data on-the-fly, but as you suggest 
above and from something Frank Flynn suggested, I would be better off 
having a separate table with monthly results. They could all be 
pre-calculated except the current month.

> > Normally start and end dates would be input via a form.
> 
> I don't understand, at first you talked of "$given_date and now we
> have two dates! Are you inputting a month - asking for the average for
> January for example. Or are you putting in two dates representing a
> period of arbitrary length and asking for an average of that, eg 42
> days? Please clarify.

Input is two dates, granularity one month. For example start Jan 2000,
finish Dec 2001. Then for each month in that period, I want the avarage
for each month. For example:

2000  January   56.2
2000  February  34.4
 ....
2001  December  48.6

There will be a whole lot of other statistics as well, such as number of 
eggs laid, number hatched, number of surviving chicks etc. But I can 
calculate _them_ quite easily.

> 
> If I have followed your explanation, and repeated your logic, then we
> would indeed need to step through the days. However this is not the
> 'relational way' - there may be another way to achieve the 'numbers'.
> Do you actually want/use the daily figures or is it only the
> bottom/end-of-month average that is important?

End of month averages only. 

> 
> Trouble is it's after midnight here. Apologies. Please would you
> respond to the questions above, and if no one else steps in meantime,
> I'll endeavor to return with a more lucid analysis in the morning...

Sorry to keep you awake :-)

Thanks for your help,

Regards,
    Garry.


-- 
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to