2017-03-22 11 views
1

私は2つのデータベーステーブルを持ち、両方とも多数の行を持っています。最初の表は製品の概要を示し、2番目の表は製品の追加情報を示しています。テーブルは以下のようになります:私は一致させることにより、製品に対応するaddtionalの情報を見つけることができています次のクエリではMysqlのクエリ - "フィルタ"を含める方法

 

    #Products 
    + ---------- + ------ + ------------ + 
    | Product_Id | Status | EAN   | 
    + ---------- + ------ + ------------ + 
    | 1   | 1  || 
    | 2   | 1  || 
    | 3   | 1  | 6548214656 | 
    | 4   | 2  | 245511411241 | 
    | 5   | 1  | 8888888888 | 
    | etc.  | etc . | etc.   | 
    + ---------- + ------ + ------------ + 

 


    #Info 
     + ------- + ------------ + --------- + ---------- + 
     | Info_Id | EAN   | Info_Type | Info_Value | 
     + ------- + ------------ + --------- + ---------- + 
     | 1  || brand  | brand1  | 
     | 2  || type  | type1  | 
     | 3  || price  | 0.00  | 
     | 4  || brand  | brand6  | 
     | 5  || type  | type3  | 
     | 6  || price  | 15.00  | 
     | 7  | 6548214656 | brand  | brand34 | 
     | 8  | 6548214656 | type  | type1  | 
     | 9  | 6548214656 | price  | 99.00  | 
     | 10  | 245511411241 | brand  | brand324 | 
     | 11  | 245511411241 | type  | type1  | 
     | 12  | 245511411241 | price  | 98.00  | 
     | 13  | 8888888888 | brand  | brand1  | 
     | 14  | 8888888888 | price  | 9.00  | 
     | 14  | 8888888888 | type  | type4  | 
     | etc. | etc.   | etc.  | etc.  | 
     + ------- + ------------ + --------- + ---------- + 

EANさん:

 


    select i.EAN 
      , p.ProductStatus 
      , max(case info_type when 'brand' then info_value end) as brand 
      , max(case info_type when 'type' then info_value end) as [type] 
      , max(case info_type when 'price' then info_value end) as price 
     from #Info i 
     inner join #Products p on p.ean = i.ean 
     WHERE p.Status=1 
     group by i.EAN, p.ProductStatus ORDER BY P.Product_id DESC LIMIT 10 

これは私に次の表を提供:

 


    + ------------ + ------ + -------- + ----- + ----- + 
     | EAN   | Status | brand | type | price |  
     + ------------ + ------ + -------- + ----- + ----- + 
     || 1  | brand1 | type1 | 0.00 | 
     | 6548214656 | 1  | brand34 | type1 | 99.00 | 
     || 1  | brand6 | type3 | 15.00 | 
     | 8888888888 | 1  | brand1 | type4 | 9.00 | 
     | etc. (10 products)        | 
     + ------------ + ------ + -------- + ----- + ----- + 

しかし、今では特定のブランド、種類または価格。たとえば、価格が50より大きい(Info_Type =価格とInfo_Value> 50.00)製品を選択し、2番目のブランドが特定のブランドである場合、 "brand1"(Info_Type =ブランドとInfo_Value = brand1)と言うことができます。誰かが私の質問にこれを含める方法を教えてもらえますか?

 
    + ------------ + ------ + -------- + ----- + ----- + 
    | EAN   | Status | brand | type | price |  
    + ------------ + ------ + -------- + ----- + ----- + 
    || 1  | brand1 | type1 | 0.00 | 
    | 6548214656 | 1  | NULL  | type1 | 99.00 | 
    || 1  | NULL  | type3 | 15.00 | 
    | 8888888888 | 1  | brand1 | type4 | 9.00 | 
    | etc. (10 products)        | 
    + ------------ + ------ + -------- + ----- + ----- + 

は、私は次のような結果を見たい:

 

    select i.EAN 
     , p.ProductStatus 
     , max(case when (info_type = 'brand' AND info_value='brand1') then info_value end) as brand 
     , max(case info_type when 'type' then info_value end) as [type] 
     , max(case info_type when 'price' then info_value end) as price 
    from #Info i 
    inner join #Products p on p.ean = i.ean 
    WHERE p.Status=1 
    group by i.EAN, p.ProductStatus ORDER BY P.Product_id DESC LIMIT 10 

はしかし、これは次のような結果が得られます。多くのものを試してみました、私は望ましい結果に来た最も近いが、次のクエリです

 
    + ------------ + ------ + -------- + ----- + ----- + 
    | EAN   | Status | brand | type | price |  
    + ------------ + ------ + -------- + ----- + ----- + 
    || 1  | brand1 | type1 | 0.00 | 
    | 8888888888 | 1  | brand1 | type4 | 9.00 | 
    | etc. (10 products)        | 
    + ------------ + ------ + -------- + ----- + ----- + 

誰が私を助けますか? :)

答えて

0

あなたはhavingを使用することができます。

select i.EAN, p.ProductStatus, 
     max(case when (info_type = 'brand' AND info_value='brand1') then info_value end) as brand, 
     max(case info_type when 'type' then info_value end) as [type], 
     max(case info_type when 'price' then info_value end) + 0 as price 
from #Info i inner join 
    #Products p 
    on p.ean = i.ean 
where p.Status=1 
group by i.EAN, p.ProductStatus 
having price < 10 
order by P.Product_id DESC 
LIMIT 10; 

+ 0info_valueが文字列として格納されているように見えるためです。ただし、Priceを数値にする必要があるため、これを数値に変換します。

+0

しかし、私はブランドの選択を紛失しています。 – mh3982

+0

@ mh3982。 。 。クエリは、あなたの質問のクエリに基づいています。私はフィルタリングのために 'having 'を使う方法を指摘していました。 –

+0

Thnx。価格選択で+0はどこですか?とにかく、これは解決策のようです!どうもありがとうございました! – mh3982

関連する問題