At 13:53 +0000 1/2/03, Steve Vernon wrote:
Thanks for the email...
Brilliant idea, but it does not give 0 for rows without a project for a
year. It gives 1 for these rows.
COUNT(*) counts rows, not values. Try using COUNT(projects.startYear)
instead, which will count only non-NULL values. (The LEFT JOIN returns
a row with all projects columns set to NULL for the case where there is
no project for a year.)
As a test idea, I removed the group by and count, and instead of count
outputted the start and end year.
What that gave me was say for 1953 where there was 3 projects, 3 lines with
the start and end year for those projects. But for a year without a project
gives start and end year as null.
e.g. (not true examle)
year startyear endyear
1901 NULL NULL
....
1953 1952 1954
1953 1951 1956
1953 1950 1980
....
I suppose I need to do a where to remove null values, but I cant work
out where it goes!
Thanks, ;-)
Steve
XX
Sounds to me like you'll need to join for that -- and list all the years
you
are interested in in another table. Try this?
SELECT y.Year, count(*) FROM Year as y LEFT JOIN projects ON
project.startyear<=y.Year AND project.endyear>=y.Year GROUP BY y.Year;
This will give you a count of 0 for any years without a project (Almost
100%
certain =] ). But don't blame me if the query is grossly inefficient!
Nick Elliott
----- Original Message -----
From: "Steve Vernon" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Tuesday, December 31, 2002 10:44 AM
Subject: Re: Year Lists
> Martin,
> Thanks for the reply.
>
> Good plan but at the moment my query is like (had to alter it
slightly
> as it was in PHP and multiple lines, so dont take it as working).
>
> SELECT projects.name, project.endyear, project.startyear FROM projects
WHERE
> projects.startyear <= '(INPUT THE YEAR HERE) && (projects.leaveyear >=
> '(YEAR HERE AS WELL)' || projects.leaveyear = '0000' ) LIMIT 5000
>
> What you suggest basically will give a count on start year (or end
year
> if altered), which I have implemented and working for ended year. Say a
> project started in 1920 and another in 1921 and they both finish in
1925.
I
> would expect to get this:
>
> 1920 1 Project
> 1921 2 Projects
> 1922 2 Projects
> 1923 2 Projects
> 1924 2 Projects
> 1925 2 Projects
> 1926 0 Projects (or no line at all ideally).
> .... up to 2003
>
>
>
> Ideally if a year does not have any projects it would not be listed.
>
> Any more help would be great, or I could be wrong and you could have
the
> answer!
>
> Steve
>
>
>
> > On Tue, 2002-12-31 at 14:53, Steve Vernon wrote:
> > > Hiya,
> > > I have a database about projects in a company, they all have a
start
> > > year and end year. If the projects have not ended then they get a
end
> year
> > > of 0000. I have made a SQL command, given a year, works out with
> projects
> > > are running in that year.
> > >
> > > The company I am doing this for, wants basically a drop down box
> which
> > > says (1950- 8 Projects) and such like. Now with the current command
I
> have
> > > it would mean 92or so SQL commands as the company has records back
to
> 1910.
> > >
> > > Is there a way to do this in one command? I have searched all
the
> > > mannual and I can work out something similair to a for loop in SQL.
> Would
> > > variables help?
> > >
> >
> > Hi Steve,
> >
> > You want to use "select .... group by", something like:
> >
> > select start_year, count(*) from projects group by start_year;
> >
> >
> > ==
> > > Martin
---------------------------------------------------------------------
Before posting, please check:
http://www.mysql.com/manual.php (the manual)
http://lists.mysql.com/ (the list archive)
To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php