MySQL帮助,计算最后记录的信息

时间:2010-12-23 09:18:34

标签: php mysql count

我有两个表,一个包含项目(项目)的唯一序列号,另一个包含状态更改以及这些项目的其他信息(详细信息)。

表格设置如下:

Item
----
itemID
itemName
itemDate

details
-------
detID
itemID
modlvl
status
detDate

所有项目在详细信息表中至少有一条记录,但随着时间的推移,状态已更改或修改级别已更改(这两项都由其他相应表中保存的数字标识)并创建了新记录每次状态/ modlvl都会改变。

我想在我的网页上使用php显示一个表格,用于识别项目的不同mod级别,并显示每个项目当前状态的计数。

修改

这是表中数据的示例以及我想要实现的目标。

当前的Mod级别范围为1到3。

状态表示是:

1   In Use
2   In Store
3   Being repaired
4   In Transit
5   For Disposal
6   Disposed
7   Lost

项目

itemID  itemName OrigMod itemDate    
1000    PSU      1       2009-10-01 22:12:12
1001    PSU      1       2009-10-01 22:12:12
1002    PSU      1       2009-10-01 22:12:12
1003    PSU      1       2009-10-01 22:12:12
1004    PSU      1       2009-10-01 22:12:12
1005    PSU      1       2009-10-01 22:12:12
1006    PSU      1       2009-10-01 22:12:12
1007    PSU      1       2009-10-01 22:12:12
1008    PSU      1       2009-10-01 22:12:12
1009    PSU      1       2009-10-01 22:12:12
1010    PSU      1       2009-10-01 22:12:12

详细

detID   itemID  modlvl  detDate     status

1       1000    1       2009-10-01   1
2       1001    1       2009-10-01   1
3       1002    1       2009-10-01   1
4       1003    1       2009-10-01   1 
5       1004    1       2009-10-01   1
6       1005    1       2009-10-01   1
7       1006    1       2009-10-01   1
8       1007    1       2009-10-01   1
9       1008    1       2009-10-01   1
10     1009    1       2009-10-01   1
11     1010   1 2009-10-01  1
12     1001   1 2010-02-01  2
13     1001   1 2010-02-03  4
14     1001   1 2010-03-01  3
15     1000   1 2010-03-14  2
16     1001   2 2010-04-01  4
17     1006   1 2010-04-01  2
18     1001   2 2010-04-03  2
19     1006   1 2010-04-14  4
20     1006   1 2010-05-01  5
21     1002   1 2010-05-02  2
22     1003   1 2010-05-10  2
23     1010   1 2010-06-01  2
24     1006   1 2010-06-18  6
25     1010   1 2010-07-01  7
26     1007   1 2010-07-02  2
27     1007   1 2010-07-04  4
28     1003   1 2010-07-10  2
29     1007   1 2010-07-11  3
30     1007   2 2010-07-12  4
31     1007   2 2010-07-15  2
32     1001   2 2010-08-31  1
33     1001   2 2010-09-10  2
34     1001   2 2010-10-01  4
35     1008   1 2010-10-01  2
36     1001   2     2010-10-05  3
37     1008   1 2010-10-05  4
38     1008   1 2010-10-10  3
39     1001   3 2010-10-20  4
40     1001   3 2010-10-25  2

使用上面的表格我希望得到这个结果

MoLvl Use Store Repd Transit Displ Dispd Lost Total
1     3   3     1    0       0     1     1    9
2     0   1     0    0       0     0     0    1
3     0   1     0    0       0     0     0    1
Total 3   5     1    0       0     1     1   11

2 个答案:

答案 0 :(得分:1)

您可以尝试此查询:

SELECT Item.itemID, Item.itemName, max(details.modlvl), max(details.status) 
FROM Item, details
WHERE Item.itemID = details.itemID
GROUP BY Item.itemID, Item.itemName

这是不可测试的,但应该运作良好。

答案 1 :(得分:0)

SELECT  m.modlvl,
        COALESCE(SUM(status = 1), 0) AS use,
        COALESCE(SUM(status = 2), 0) AS store,
        …,
        COALESCE(COUNT(detId)) AS total
FROM    (
        SELECT  1 AS modlvl
        UNION ALL
        SELECT  2 AS modlvl
        UNION ALL
        SELECT  3 AS modlvl
        ) m
LEFT JOIN
        details d
ON      d.modlvl = m.modlvl
GROUP BY
        m.modlvl WITH ROLLUP