如何通过系统分析项目的路径

时间:2013-03-28 18:12:05

标签: php mysql

我正在寻找一个如何分析问题的方向。我在一家小型制造公司工作。我们每天涂上约150件物品。那些物品然后转到质量控制。大约70%通过QC。剩下的30%必须以某种方式修复。

我们有5种不同的维修类别:Repaint, Reclear, Remake, Reglaze, Fix

每次订单获得QC时,我的系统都会在“修复”mysql表中输入一些数据。如果它通过QC,则会给出Great类别。它的结构是这样的:

id | Repair | Date
 5 | repaint| 2013-01-01
 6 | reclear| 2013-01-01
 5 | great  | 2013-01-02  ...etc

我需要能够对正在发生的行为进行分析。我想知道什么'路径'项目正在下降。 例如。有多少百分比的商品包含这些类别Reclear->Repaint->GreatRepaint->Repaint->Remake->Great的百分比是多少(每个项目最终都应该以'Great)结尾

我有点坚持从哪里开始弄清楚如何分析这个问题。

我是否应该跟踪表中的维修号码?如果我这样做,那么也许我可以使用自我加入来选择repairnum=1 AND repair=Repaintrepairnum=2 AND repair='Great'加入的订单这会告诉我哪些订单沿着路径Repaint->Great走了我对我有点犹豫不决走这条路是因为1)我不想在向表中插入新行之前必须进行查询并得到修复编号,并且2)似乎我必须有一些非常讨厌的查询来分析项目有5或6(或更多)修理。

也许有人可以指出我正确的方向?

我的应用程序是在php和mysql中。

1 个答案:

答案 0 :(得分:0)

您不需要单独的“维修编号”,因为您有每次维修的日期,因此可以按此订购(假设您在一天内可以进行多次维修时也存储时间)

项目的“路径”是按日期顺序修复的列表。如果您只是说SELECT repair FROM repairs WHERE id=5 ORDER BY date ASC,您会将它们作为行。

诀窍是使用GROUP_CONCAT - SELECT GROUP_CONCAT(repair ORDER BY date ASC SEPARATOR '->') FROM repairs WHERE id=5

将这些值转换为表示整个路径的单个值

完成后,您可以使用GROUP BY为数据库中的所有产品运行该功能,然后使用HAVING查找其中的模式:

SELECT 
    id,
    GROUP_CONCAT(repair ORDER BY date ASC SEPARATOR '->') as path
FROM
    repairs
GROUP BY
    id
HAVING
    path = 'Repaint->Repaint->Remake->Great'

请注意,我没有使用MySQL的副本来试试这个,所以我可能犯了一个错误,但是手册表明上面的应该工作。