1

問題を分析する方法について少し方向性を探しています。私は小さな製造会社で働いています。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をたどったかを教えてくれます.テーブルに新しい行を挿入する前にクエリを実行して修復番号を取得し、2) 5 つまたは 6 つ (またはそれ以上) の修復があるアイテムを分析するには、かなり厄介なクエリが必要なようです。

おそらく誰かが私を正しい方向に向けることができますか?

私のアプリはphpとmysqlにあります。

4

1 に答える 1

0

各修理が行われた日付があるため、個別の「修理番号」は必要ありません。その日付で注文できます (1 日に複数の修理を行うことができる場合は、時間も保存すると仮定します)。

アイテムの「パス」は、日付順に並べられた修理のリストです。あなたが言う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

それができたら、 を使用して DB 内のすべての製品に対してそれを実行し、 を使用してその中の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 に答える