2011-04-28 85 views
1

嘿。當用戶填寫報告表並提交時,我有160列填充了數據。這些列中的一些列包含相似的數據,但每個記錄集都需要有多個此數據的實例,因爲它可能在報告中的每個實例都不相同。從多個列中計算特定值並按另一列中的值進行分組...在mysql中

例如,員工在當天某個時間點按某種類型打開一個案件,然後在當天的另一個點打開另一個不同類型的案例。我想根據這些列中的值爲每個用戶創建總計。有一個列集,我現在想要定位,案例類型。我希望能夠在CT1,CT2,CT3 ...到CT20的列中看到值「TSTO」的所有實例。然後根據員工ID號排序,這只是表中的一列。

任何想法?我正在爲這個掙扎。

到目前爲止,我有SELECT CT1, CT2, CT3, CT4, CT5, CT6, CT7, CT8, CT9, CT10, CT11, CT12, CT13, CT14, CT15, CT16, CT17, CT18, CT19, CT20 FROM REPORTS GROUP BY OFFICER

這將顯示一個記錄集的所有案件類型項的值,但我需要算來,我試圖用,

SELECT CT1, CT2, CT3, CT4, CT5, CT6, CT7, CT8, CT9, CT10, CT11, CT12, CT13, CT14, CT15, CT16, CT17, CT18, CT19, CT20 FROM REPORTS COUNT(TSTO) GROUP BY OFFICER

但它只是吐出一個錯誤。我對mysql數據庫和php相當陌生,我覺得我有一個很好的把握,但查詢數據庫和涉及的語法有點混亂和/或壓倒一切現在。只需要學習語言。我會繼續尋找,我在這裏發現了一些類似的東西,但我不明白我在看什麼(完全),我想避開使用「有效」的代碼,但我不完全理解。

非常感謝你:)

編輯 -

所以這個數據庫是針對天工作,爲員工的活動報表服務器。這個人經常會在白天打開案件。這些案件的類型各不相同,其不同類型由四字母約定。因此,您的不同案例類型可能是TSTO,DOME,ASBA等等。因此,用戶將在一天中填寫表格,然後將其提交到數據庫。這一切都很好:)現在我正在嘗試構建一個頁面,它將根據用戶對用戶活動的統計信息的用戶請求來查詢數據庫。所以現在我正在嘗試生成統計信息。具體而言,我希望能夠生成「用戶輸入的案例類型」的統計信息,並以人爲條件生成「EMPLOYEEIDXXX」

因此,當用戶提交表單時,他們將在此輸入一種形式的四個字母的案例類型最多20次,這種案例類型入口有20個字段,因此有20個字段。因此這20個案例類型的列將在一個記錄集中,每個報告生成一個記錄集。另一個生成的列是employeeid列,它基本上標識誰通過表單生成記錄集。

所以,我想能夠查詢所有記錄集的案例類型的所有20列,對於定義類型的案例(TSTO,DOME,ASBA等等),然後將其分組到相應的用戶(s )。

所以輸出會看起來像,

316 TSTO對employeeid108

我希望這有助於清除它一點。再次,我對這一切都相當新鮮,所以我不是最好的白話和最佳實踐等等......

非常感謝:)

編輯2 -

所以對我所要進一步闡述,我有了164場的HTML表單。這些字段中的每一個最終將值存入我的數據庫中的單個記錄集中的一列中,每次提交。我無法發佈圖片或兩個以上的網址,因此我會盡力在沒有屏幕截圖的情況下解釋它。

因此,這些信息會在數據庫中發生。然後是查詢。我有一個搜索頁面,它使用HTML表單來選擇要搜索的信息的類型。然後它會顯示與查詢匹配的每個報告的摘要。用戶輸入他們想要查看的報告的REPORT ID#到另一個小表單(帶有一個提交按鈕的輸入字段),這個小表單將他們帶到一個頁面上,當他們點擊提交時顯示完整報告。

所以現在我試圖做總計和實現我的數據庫將需要一些工作和調整,以便更容易地爲它創建查詢所需的不同信息。到目前爲止,我已經收集了一些很好的信息,並將繼續嘗試儘可能提供有關我的設置的簡要信息。

謝謝。

編輯3 -

也許你可以去我的photobucket和檢查出來,應該讓我做一個鏈接,還有爲五個截圖,你可以種看到更好的我所發生的事情。

http://s1082.photobucket.com/albums/j376/hughessa

:)

+0

因此,值「TSTO」...可以在任何列CT1到CT20中?你想知道每個列中有多少個「TSTO」實例?或者,每ROW有多少累積..即:對於支持輸入1,它被發現5次,輸入2有2次......但是對於一名員工,它出現7次?如果您可以提供一些示例數據和預期的輸出結果,那麼這將有助於我自己和/或其他支持論壇用戶現在和將來的使用。 – DRapp 2011-04-28 16:05:37

+0

感謝您的快速響應。解釋有點奇怪。我儘量不要羅嗦,但我會編輯問題以更好地反映設置。 – Shawn 2011-04-28 16:43:32

回答

0

你正在尋找的查詢將是非常漫長而複雜的當前的數據庫架構。

像列(some_id,column1,column2,column3,column4 ...),其中列存儲相同類型的數據的每個表也可以由表(some_id,column_number,column_value)表示而不是1行的值爲20列,你有20行。

所以,你的表應該比較像:

officer  ct_number  ct_value 
1   CT1   TSTO 
1   CT2   DOME 
1   CT3   TSTO 
1   CT4   ASBA 
(...) 
2   CT1   DOME 
2   CT2   TSTO 

對於這樣的表,如果你想找到不同ct_values的許多OCCURENCES如何在那裏爲幹事1你可以使用一個簡單的查詢:

SELECT officer, ct_value, count(ct_value) AS ct_count 
    FROM reports WHERE officer=1 GROUP BY ct_value 

給出結果

officer ct_value ct_count 
1   TSTO  2 
1   DOME  1 
1   ASBA  1 

如果你想了解有多少TSTO的是有不同的人員可以使用:

SELECT officer, ct_value, count(officer) as ct_count FROM reports 
    WHERE ct_value='TSTO' GROUP BY officer 

給出結果

officer ct_value ct_count 
1  TSTO  2 
2  TSTO  1 

也爲您的舊模式中的任何類型的查詢,可以很容易地轉換到新的架構。

但是如果你需要存儲有關我建議有兩個表每個特定報告的更多信息:

Submissions 
submission_id report_id ct_number ct_value 
primary key  
auto-increment 
------------------------------------------------ 
1    1   CT1  TSTO 
2    1   CT2  DOME 
3    1   CT3  TSTO 
4    1   CT4  ASBA 
5    2   CT1  DOME 
6    2   CT2  TSTO 

與REPORT_ID指向記錄在另一表的列數,你需要額外的數據:

Reports 
report_id  officer  date     some_other_data 
primary key 
auto-increment 
-------------------------------------------------------------------- 
1    1   2011-04-29 11:28:15 Everything went ok 
2    2   2011-04-29 14:01:00 There were troubles 

示例: 多少TSTO的是有不同的人員:

SELECT r.officer, s.ct_value, count(officer) as ct_count 
FROM submissions s JOIN reports r ON s.report_id = r.report_id 
WHERE s.ct_value='TSTO' 
GROUP BY r.officer 
+0

感謝您的輸入piotrm!在設置這些東西之前,我可以看到正規教育/培訓的位置是否有價值。我會在桌子上徘徊,看看我能用它做些什麼來嘗試讓它更易於管理。謝天謝地,這尚未投入生產,所以它不應該成爲太大的問題。隨着事態的發展,我會在這個問題上討論一段時間。謝謝! – Shawn 2011-04-28 20:06:14

+0

我正確地認爲這將爲每個病例類型提交記錄集?就目前而言,每個報告的所有案例類型和其他數據都在一個記錄集中。我擔心的是將數據與其他數據保持一致,以便一次提交的數據位於不同的記錄集中。如何將案例類型記錄集與報告提交中的其他信息綁定到記錄集?或者我是否會爲每個報告提交生成多個記錄集,爲完整報告查詢設置記錄集並統計記錄集? (IE你在這裏給我看)謝謝! – Shawn 2011-04-28 21:00:38

+0

您只需存儲數據,並使用查詢即時統計數據。我更新了模式,你不需要在每一行中存儲報告信息,而只需要在報表中的行索引。您尚未提供關於您真正嘗試建模的信息,因此您可能需要更多表格。 – piotrm 2011-04-28 23:43:58

相關問題