2010-10-08 77 views
1

我們在mysql數據庫中有員工考勤系統,但它沒有報告功能,我正嘗試使用PHP生成報告。在水平視圖中顯示MYSQL查詢結果

讓我明確解釋一下:

員工每天打卡並打卡。這些打孔輸入和輸出存儲在mysql數據庫表(考勤)中。此表包含5個字段,如打卡,打卡,employeeid,備註,attendanceid。我們的員工姓名和其他詳細信息存儲在其他表(員工)中。

我的查詢是我想要在水平視圖中使用這兩個表生成報表。

例如:

列1:員工姓名 列2:punchin 欄3:樣片 column4:punchin 柱:樣片

我能夠爲所有員工每日報告,但希望產生每週/月度報告。

請幫忙。

感謝, 拉吉

+0

你可能知道你在問什麼 - 但我不認爲你解釋得很好。請提供相關的模式詳細信息,示例記錄以及您希望如何格式化數據的示例。 – symcbean 2010-10-08 15:08:25

回答

0

的報告格式過於含糊。 是否應該是:

  • 每行用戶一行後跟所有砰砰聲和穿孔作爲單行(不好)。

  • 應punchins /超時被彙總,給出一個總計在此期間每個用戶的工作時間?
1

這聽起來像你試圖做一個數據透視查詢(切換行和列)。 MySQL不支持這一點,但它可以被模擬。然而,只需獲取需要的數據並用php解析它就容易多了。

這聽起來像(這只是一個猜測),您希望員工成爲第一列,並且所有打孔輸入/輸出都與該員工位於同一行。

這裏有一個裂縫,在你想要做什麼:

$data = select_all_relevant_data_with_mysql(); 
$employees = array(); 
while ($row = $data->fetch()) { 
    $employees[$row['employee']][] = array(
     'in' => $row['punchin'] 
     , 'out' => $row['punchout'] 
    ); 
} 

(請注意,這將產生對每個員工進入未定義指數告示你應該處理這個問題,但它會在代碼中有一倍)。

現在,您已經爲每位員工安排了衝突/出數據(希望按順序,MySQL可以使用ORDER BY輕鬆處理)。

現在你做一些鏈接:

foreach ($employees as $name => $punches) { 
    echo <<<HTML 
     <tr><td>$name</td> 
HTML; 
    foreach ($punches as $punch) { 
     echo <<<HTML 
     <td>$punch[in]</td><td>$punch[out]</td> 
HTML; 
    } 
    echo '</tr>'; 
} 

我會建議使用模板系統,如PHPTAL對於這種事情。無恥的插件:)