2011-04-28 83 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

相关问题