2017-03-27 12 views
1

テーブル名user_feedbackがあります。ここで私はuserfeedbackを保存します。1フィールドに2つ以上の値が含まれるmysqlテーブルの値の数をカウントする方法

私はIE-

 f_id f_name  product_id 
     1  x   5 
     2  y   1,3 
     3  z   1,5 
     4  A   2,3,4,7 

製品IDを保存し、製品のテーブルがどこにあるか私は1つの列、名前をPRODUCT_IDしている。この表で

-

product_id pname 
     1  samsung 
     2  apple 
     3  micromax 
     4  vivo 
     5  sony 
     6  lenovo 
     7  xolo 

製品・カウントの数を知る方法

EX-各製品の

 prdname  count 
     samsung  2 
     apple   1 
     micromax  2 
     vivo   1 
     sony   2 
     lenovo  0 
     xolo   1 
+2

データベース構造を制御できましたか?このモデルは非常に多くのこの種のクエリをはるかに簡単に改善することができます –

+0

@StefanoZanini - 申し訳ありません私はあなたを得る?私はあなたが解決策の上で見つけることを助けることができます –

答えて

-1

あなたが知っている限り、あなたはそれを直接行うことはできません。私の見地からは、まず配列内のすべてのproduct_idを展開する必要があります(PHPの展開関数を使用して)。次に、指定されたpnameのすべての製品を数えることができます。あなたがより多くの情報を必要とするかどうかを教えてください。

1

あなたはそれらのテーブル構造を制御している場合は、私は適切なNを実装することをお勧めしたい:Nの関係、feedbackテーブルからproduct_idを削除すると列

のようにのみproduct_idf_idで新しいテーブルprod_fb_relを作成しますそのテーブルあなたは

f_id | product_id 
    1 |   5 
    2 |   1 
    2 |   3 
    3 |   1 
    3 |   5 
    4 |   2 
    4 |   3 
    4 |   4 
    4 |   7 

を持っていると思いますし、必要なクエリが

ような単純なものでしょう10

編集

あなたが今持っているデータから始まる新しい表を移入するには、あなたはおそらく(this oneのような)split関数を定義し、各既存のレコードを取る手順を記述する必要があり、数のループproduct_idのIDは、各繰り返しでsplit関数を使用してIDを抽出し、新しいテーブルに挿入します。

+0

Thanxたくさん、これはこのクエリを整理するのに最適な方法ですが、1つの大きな問題はuser_feedbackテーブルの既存2500レコードで新しいテーブルを作る方法です –

+0

私は簡単なあなたがそれを行う方法についての説明 –

0

(あなたが構造を変更することができない場合)は、このような何か(ただし、公演に注意を払う...):

CREATE TABLE T1 (F_ID INT, PRODUCT_LIST VARCHAR(20)); 
CREATE TABLE T2 (PRODUCT_ID INT, PNAME VARCHAR(20)); 
INSERT INTO T1 VALUES (1, '5'); 
INSERT INTO T1 VALUES (2, '1,3'); 
INSERT INTO T1 VALUES (3, '1,5'); 
INSERT INTO T1 VALUES (4, '2,3,4,7'); 
INSERT INTO T2 VALUES (1,'samsung'); 
INSERT INTO T2 VALUES (2,'apple'); 
INSERT INTO T2 VALUES (3,'micromax'); 
INSERT INTO T2 VALUES (4,'vivo'); 
INSERT INTO T2 VALUES (5,'sony'); 
INSERT INTO T2 VALUES (6,'lenovo'); 

SELECT PNAME, (SELECT COUNT(*) FROM T1 WHERE (CONCAT(',' , T1.PRODUCT_LIST,',')) LIKE CONCAT('%,', CAST(T2.PRODUCT_ID as CHAR) ,',%')) AS RC 
FROM T2; 

出力:

PNAME RC 
1 samsung 2 
2 apple 1 
3 micromax 2 
4 vivo 1 
5 sony 2 
6 lenovo 0 
0
select pname, count(*) 
from product t1 
join user_feedback t2 on FIND_IN_SET(t1.product_id,t2.product_id) 
group by pname; 

ただ、上記してみてくださいこれが役立つことを願っています。

+0

あなたは素晴らしいです、ありがとう、両方の答えは、クエリを解決します。 –

関連する問題