2016-11-20 5 views
1

私は、各行に文字列がどのくらいの頻度で出現したかを調べ、最終的に別の列を更新する方法を頭に入れています。mySQLの各行の出現数をカウントします

私は、レコード内の各質問のためのスポンサー回答含ま質問表がある場合:私がこのデータをインポートしています

 
+-------------+-----+-----+-----+-----+-----+-----+----+-----+ 
| response_id | q1 | q2 | q3 | q4 | q5 | Yes | No | N/A | 
+-------------+-----+-----+-----+-----+-----+-----+----+-----+ 
|   1 | Yes | N/A | Yes | No | Yes | 2 | 1 | 1 | 
|   2 | No | Yes | No | Yes | N/A | 2 | 1 | 1 | 
|   3 | Yes | No | No | N/A | Yes | 1 | 1 | 2 | 
+-------------+-----+-----+-----+-----+-----+-----+----+-----+ 

を:

 
+-------------+-----+-----+-----+-----+-----+ 
| response_id | q1 | q2 | q3 | q4 | q5 | 
+-------------+-----+-----+-----+-----+-----+ 
|   1 | Yes | N/A | Yes | No | Yes | 
|   2 | No | Yes | No | Yes | N/A | 
|   3 | Yes | No | No | N/A | Yes | 
+-------------+-----+-----+-----+-----+-----+ 

それがこれを行うことは可能ですがcsvをLaravelアプリケーションに追加します。それが不可能な場合は、最終結果を得るためにこのデータを並べ替える方法があります。

ありがとうございます!

+0

私は良い解決策は、インポートプロセスが終了する後のデータからMySQLのストアドプロシージャを使用することであると信じています。 –

+0

ストアドプロシージャを設定しました。このアドバイスをありがとう! –

答えて

2

あなたは、以下のいずれかのよう更新クエリを使用することができます。

update responses set Yes = IF(q1='Yes',1,0) 
     + IF(q2='Yes',1,0) 
     + IF(q3='Yes',1,0) 
     + IF(q4='Yes',1,0) 
     + IF(q5='Yes',1,0); 

これは、既存の行を更新します(ここではSQL Fiddleです)。新しい行については、行が挿入される前にこれらの値を計算するために、アプリケーション自体に何かを書くことができます。ここで

+0

ありがとうございました!これは素晴らしい作品です!あなたはこれにどれくらい費やしているのか分かりません。再度、感謝します! –

0

あなたのための穴クエリ:

SELECT 
    response_id 
    ,q1,q2,q3,q4,q5 
    , IF (q1 = 'Yes', 1,0)+IF (q2 = 'Yes', 1,0)+IF (q3 = 'Yes', 1,0)+IF (q4 = 'Yes', 1,0)+IF (q5 = 'Yes', 1,0) AS `Yes` 
    , IF (q1 = 'No', 1,0)+IF (q2 = 'No', 1,0)+IF (q3 = 'No', 1,0)+IF (q4 = 'No', 1,0)+IF (q5 = 'No', 1,0) AS `No` 
    , IF (q1 = 'N/A', 1,0)+IF (q2 = 'N/A', 1,0)+IF (q3 = 'N/A', 1,0)+IF (q4 = 'N/A', 1,0)+IF (q5 = 'N/A', 1,0) AS `N/A` 
FROM my_table; 
関連する問題