In article <[EMAIL PROTECTED]>,
[EMAIL PROTECTED] writes:

> With a LEFT JOIN you will get back your "zero hours" only if there exist 
> records in the Timesheets table that match no records in the projects 
> table.  If you have no Timesheets data for the 23rd or 24th, then you 
> can't have any rows in your results for those dates.  MySQL won't fill in 
> the missing dates for you.

> I have had to resort to writing a script that builds a temporary table 
> that contains a complete range of the dates I need for a query (the 
> results are to be used to make a graph) just so that I can have blank 
> values for those dates where no data exists.  Others on the list may have 
> better ideas on how to fill in missing data (like your missing dates) so I 
> only offer my idea as a suggestion, not a solution.

I'm using roughly the same technique, with a small variation: my
helper table is not temporary, but permanent, and contains just the
integers 1 .. 1000:

  CREATE TABLE seq (val INT PRIMARY KEY);
  INSERT INTO seq VALUES (1), (2), ..., (1000);

(You could use any range of values you need.)

The join now looks like this:

  SELECT '2004-10-17' + INTERVAL s.val DAY AS day,
         T.Hours, P.Project_Name
  FROM utildb.seq s
  LEFT JOIN Timesheets T ON T.Date = '2004-10-17' + INTERVAL s.val DAY
  LEFT JOIN Projects P ON P.Project_ID = T.Project_ID
  WHERE s.val BETWEEN 1 AND 7
    AND T.User_ID = "1"
    AND T.Type = "Project"
  GROUP BY day, T.Project_ID
  ORDER BY day

The disadvantage is that the join expression is more complicated, but
I don't have to mess with temp tables.


-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to