跟踪每个人的每月通话数 - MySQL还是XML?

时间:2012-10-22 18:58:32

标签: php mysql xml

我正在尝试确定为大约43名员工存储每月通话记录的最佳方式。客户希望能够以几种不同的方式查看数据 - 谁拥有最多/最少的电话年初至今,前10名的图表,从前一年的变化等等。

我考虑过每年使用每个人的名字和每月调用计数来连续更新XML文件,但这会使提取不同类型的数据比使用MySQL时更具挑战性。

如果MySQL是一个有利的选择,那么最好每年每人每行存储一行数据,每年每个月都有一列吗?或者,每个月都添加一行,包含年,月和来电记录?

建议将不胜感激。

以下是包含数据的XML文件示例 -

<?xml version="1.0" encoding="UTF-8" ?>
<report>
    <ReportHeader>
        <Section SectionNumber="0">
            <Picture Name="DeptPic1" GraphicType="BolbField"></Picture>
        </Section>
    </ReportHeader>
    <Group Level="1">
        <GroupFooter>
            <Section SectionNumber="1">
                <Field Name="Field11" FieldName="{IncdPers.PERSONNAME}">
                    <FormattedValue>Captain John Doe</FormattedValue>
                    <Value>Captain John Doe</Value>
                </Field>
                <Field Name="Field12" FieldName="{IncdPers.PERSONLOOKUPID}">
                    <FormattedValue>Doe, John</FormattedValue>
                    <Value>Doe, John</Value>
                </Field>
                <Field Name="Field13" FieldName="DistinctCount ({In5basic.GUIDIDNUMBER}, {IncdPers.PERSONLOOKUPID})">
                    <FormattedValue>6</FormattedValue>
                    <Value>6</Value>
                </Field>
                <Field Name="Field14" FieldName="{@PercentInc}">
                    <FormattedValue>54.55</FormattedValue>
                    <Value>54.55</Value>
                </Field>
                <Text Name="Text14">
                    <TextValue>%</TextValue>
                </Text>
            </Section>
        </GroupFooter>
    </Group>
    <Group Level="1">
        <GroupFooter>
            <Section SectionNumber="1">
                <Field Name="Field11" FieldName="{IncdPers.PERSONNAME}">
                    <FormattedValue>Firefighter Jane Smith</FormattedValue>
                    <Value>Firefighter Jane Smith</Value>
                </Field>
                <Field Name="Field12" FieldName="{IncdPers.PERSONLOOKUPID}">
                    <FormattedValue>Smith, Jane</FormattedValue>
                    <Value>Smith, Jane</Value>
                </Field>
                <Field Name="Field13" FieldName="DistinctCount ({In5basic.GUIDIDNUMBER}, {IncdPers.PERSONLOOKUPID})">
                    <FormattedValue>1</FormattedValue>
                    <Value>1</Value>
                </Field>
                <Field Name="Field14" FieldName="{@PercentInc}">
                    <FormattedValue>9.09</FormattedValue>
                    <Value>9.09</Value>
                </Field>
                <Text Name="Text14">
                    <TextValue>%</TextValue>
                </Text>
            </Section>
        </GroupFooter>
    </Group>
</report>

2 个答案:

答案 0 :(得分:3)

这正是关系数据库擅长的事情。我会将数据存储在最精细的级别 - 如果您拥有它,则记录单个呼叫的记录,如果不是那么每个用户/月。每个月都有一个列将使查询变得困难。

如果您收到的数据不是原始呼叫数据,而是某种月度摘要,请将其存储在数据库中,以便在查询时为自己提供最大的灵活性。

答案 1 :(得分:2)

我有两张桌子。第一个只是关于打电话的人。第二个表格是关于这个人的电话。像这样:

Table 1
-------
+----------------+
| id        name |
+----------------+
  0         bob
  1         john
  2         mary



Table 2
-------
+----------------------------------------------+
| id        user_id     calls       date       |
+----------------------------------------------+
  0         0           12          2012-10-21
  1         1           15          2012-10-21
  2         2           23          2012-10-21
  3         0           16          2012-10-22
  4         1           17          2012-10-22
  5         2           28          2012-10-22

如您所见,您可以使用MySQL存储每日通话信息,或者您想要的任何时间间隔。您可以在任何给定的时间段内跟踪数字(上面的示例仅显示2天),根据这些数字生成报告,显示一段时间内的趋势等。