2015-05-06 69 views
5

我每天都有入場/出時鐘的條目。我希望顯示日期的所有日期,並顯示日期,即使當天沒有找到任何數據。即使在日期沒有數據的情況下,MySQL也會選擇日期範圍內的所有日期

例子:

Monday 2015-05-04 
- 2015-05-04 10:30:00 
- 2015-05-04 15:45:34 

Tuesday 2015-05-05 
- 2015-05-05 08:43:23 
- 2015-05-05 17:18:13 

Wednesday 2015-05-06 
- 2015-05-06 09:03:12 

Thursday 2015-05-07 
0 Entries 

Friday 2015-05-08 
0 Entries 

的DB模式是這樣的:

id | user_id | punch_time | punch_status 

我非常希望能夠給MySQL的日期更改爲任意的時間戳,它會表現出天那周的結果。

感謝:d


任何想法,爲什麼這不起作用讓日子,沒有記錄存在?

SELECT * FROM punch_clock, calendar_table WHERE calendar_table.dt = DATE(punch_clock.punch_time) && calendar_table.week_num = $week && calendar_table.y = $year ORDER BY punch_clock.punch_time 

較新的查詢

SELECT * FROM punch_clock LEFT JOIN calendar_table ON calendar_table.dt = DATE(punch_clock.punch_time) WHERE calendar_table.week_num = 18 && calendar_table.y = 2015; 
+0

什麼是表結構?你有什麼嘗試? –

+0

嘗試抓取所需範圍內的所有數據並按日期對其進行排序。然後循環使用php – oBo

+0

@sgtBOSE更新與模式 – tutchmedia

回答

1

的MySQL,我通常使用日曆表用於此目的(含所有的日期到2030年,例如)
它可以做很多其他的事情是這樣類型的查詢,管理特別的日子等。

你要LEFT JOIN上你的餐桌,我的意思是日曆表必須「左定位」

把你最後一個查詢,我倒是做到這一點:

SELECT * 
FROM calendar AS cal 
LEFT JOIN punch_clock AS puc 
    ON (cal.dt = DATE(puc.punch_time)) 
WHERE TRUE 
    AND cal.week_num = 18 
    AND cal.y = 2015 
; 

沒試過,但是這想法,我不工作,請提供一個fiddle,所以我們可以撥弄了一下:)

+0

太棒了!它完美地工作:D謝謝 – tutchmedia

0

有此一試:

SELECT * 
FROM 
    (
    SELECT a.Date AS mydate 
    FROM (
      SELECT date('2015-05-08') - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY AS Date 
      FROM (SELECT 0 AS a 
       UNION ALL SELECT 1 
       UNION ALL SELECT 2 
       UNION ALL SELECT 3 
       UNION ALL SELECT 4 
       UNION ALL SELECT 5 
       UNION ALL SELECT 6 
       UNION ALL SELECT 7 
       UNION ALL SELECT 8 
       UNION ALL SELECT 9) AS a 
      CROSS JOIN (SELECT 0 AS a 
         UNION ALL SELECT 1 
         UNION ALL SELECT 2 
         UNION ALL SELECT 3 
         UNION ALL SELECT 4 
         UNION ALL SELECT 5 
         UNION ALL SELECT 6 
         UNION ALL SELECT 7 
         UNION ALL SELECT 8 
         UNION ALL SELECT 9) AS b 
      CROSS JOIN (SELECT 0 AS a 
         UNION ALL SELECT 1 
         UNION ALL SELECT 2 
         UNION ALL SELECT 3 
         UNION ALL SELECT 4 
         UNION ALL SELECT 5 
         UNION ALL SELECT 6 
         UNION ALL SELECT 7 
         UNION ALL SELECT 8 
         UNION ALL SELECT 9) AS c 
     ) a 
    WHERE a.Date BETWEEN '2015-05-04' AND '2015-05-08' 
) dates 
    LEFT JOIN 
    (
    SELECT * 
    FROM 
     table1 
) data 
    ON DATE_FORMAT(dates.mydate, '%Y%m%d') = DATE_FORMAT(data.punch_time, '%Y%m%d') 

SQL小提琴:http://sqlfiddle.com/#!9/72ee3/15/0

這是一個快速的,但不是理想的解決您的題。但我認爲這足夠用了。

如果你想解決問題的「完美」,我建議你閱讀這篇文章:http://www.brianshowalter.com/calendar_tables

+0

感謝您的幫助。我已閱讀文章並實施了日曆表。我的下一步是將punch_clock和calendar_table包含在加入日期的mysql查詢中嗎? – tutchmedia

+0

@tutchmedia應該是這樣的。您可以用我的SQL日曆替換日期。 –

+0

除了它以外的其他作品並沒有顯示沒有數據的日子? (請參閱我原來的帖子中的查詢)有什麼想法? – tutchmedia

相關問題