2016-05-20 10 views
0

こんにちは、私は2つのテーブル(productsissues)からPHPとMySQLでデータをフェッチしようとしています。サブクエリの構文エラー

issues表には、4つの異なる値を持つ列statusがあります。以下のようなもの、私がやりたい事は、各製品のための4つの異なる列にstatus値を表示することです:私は、クエリ

SELECT i.product_id, i.status, COUNT(*) AS count FROM issues i 
INNER JOIN products p ON i.product_id = p.id 
GROUP BY `product_id` 
+0

エラーは何ですか?データベーススキーマはどのように見えますか? –

+1

どのサブクエリですか? '' product_id''それらは私に間違った引用符のように見える。 –

答えて

0

の下に使用して以下に使用しています

S.No  Product Name Status Val1 Status Val2 Status Val2 Status Val4 

私が解決した、君たちに感謝それ

SELECT p.name, 
(select count(*) from issues where status=val1 AND product_id=p.id) as Status Val1, 
(select count(*) from issues where status=val2 AND product_id=p.id) as Status Val2, 
(select count(*) from issues where status=val3 AND product_id=p.id) as Status Val3, 
(select count(*) from issues where status=val4 AND product_id=p.id) as Status Val4 
FROM issues i INNER JOIN products p 
ON i.product_id = p.id 
where p.branch_id = 1 
GROUP BY product_id 
1

あなただけの製品に割り当てられたすべてのステータスを表示したい場合は、サブクエリの必要がない(場合にはステータスの有限数がある)

あなたのテーブルの構造はこれに類似している場合:

CREATE TABLE products 
    (`id` int, `name` varchar(4)) 
; 
CREATE TABLE issues 
    (`product_id` int, `status` varchar(2)) 
; 

はその後あなたがこの単純なクエリを使用することができます

ここ
SELECT p.id, p.name, i1.status AS 'S1', i2.status AS 'S2', i3.status AS 'S3', i4.status AS 'S4' 
FROM products p 
LEFT JOIN issues i1 ON p.id=i1.product_id AND i1.status = "S1" 
LEFT JOIN issues i2 ON p.id=i2.product_id AND i2.status = "S2" 
LEFT JOIN issues i3 ON p.id=i3.product_id AND i3.status = "S3" 
LEFT JOIN issues i4 ON p.id=i4.product_id AND i4.status = "S4" 

sqlFiddle

1

SELECT p.name、

です(status = val1およびproduct_id = p.idのissueからcount(*)を選択)をStatus Val 1、

ステータスVAL2として(ステータス= val2のANDのproduct_id = p.id問題からSELECT COUNT(*))

は(ステータス= val3はANDのproduct_id = P問題からのカウント(*)を選択します。問題からステータスVal4

として地位= val4とのproduct_id = p.idが)私はINNER I ON製品P

のJOINの問題からステータスのVal3などのID)、

(SELECT COUNT(*)。 product_id = p.id

GROUP BY product_id

+0

http://sqlfiddle.com/#!9/2a93e/1を確認してください –

関連する問題