1

我正在为如何分析问题寻找一点方向。我在一家小型制造公司工作。我们每天画大约 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->Great。有多少百分比Repaint->Repaint->Remake->Great(每个项目最终都应该以“很棒”结尾)

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

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

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

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

4

1 回答 1

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

一旦你有了它,你可以使用 a 为数据库中的所有产品运行它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 的副本来尝试这个,所以我可能犯了一个错误,但是手册建议上面应该可以工作。

于 2013-03-28T20:03:47.600 回答