2012-05-03 5 views
0

私は、ピボットテーブルまたは所望の結果を得るためにいくつかのサブクエリを作成する必要があるかどうかわからないんだけど、これは私が持っているテーブルです。MYSQLが列に反復可能なフィールドを選択

asset_id id  title   title_type 
34   1  episode 1  5 
34   2  TNS    4 
34   3  WXPR   3 
35   4  episode 57  5 
35   5  BLSH   4 
35   6  WXRE   3 
36   7  episode 56  5 
36   8  BLSH   4 
36   9  WXRE   3 

しかし、この私が欲しいものです。それぞれのtitle_typeはそれ自身の列で、title_typeは4 = BLSHのWHEREタイトルです。したがって、このように:

 
asset id  title_type 5  title_type 4 title_type 3 
35    episode 56  BLSH   WXRE 
36    episode 57  BLSH   WXRE
+0

がどのように多くの異なるタイトルの種類がありますか?彼らはいつでも変更されることがありますか?あなたの質問はどれくらい柔軟でなければなりませんか?新しいタイトルタイプが追加されたときにクエリが自動的に適応する必要がありますか? – Kaii

+0

こんにちは!今、私はタイトルの種類を使用します:3,4,5。私はそれが変わる時を予期しません。タイトルは変わるかもしれませんが(スペルやそのようなもの)、そのタイトルに関連付けられたtitle_typeは常に同じです。 – jackpass

答えて

1

もちろんの本当の修正は、データベースの構造を変更することです;-)

しかし、あなたが使用することができ、所望のデータを取得するために結合します。私の例では何の副選択関与はありません。

SELECT 
    o.asset_id, 
    /* select the data from the self-joins */ 
    `5`.title AS title_type_5, 
    `4`.title AS title_type_4, 
    `3`.title AS title_type_3 
FROM 
    foo o 
/* use self-joins to combine data of multiple rows in a single row */ 
LEFT JOIN foo `3` ON `3`.title_type = 3 AND `3`.asset_id = o.asset_id 
LEFT JOIN foo `4` ON `4`.title_type = 4 AND `4`.asset_id = o.asset_id 
LEFT JOIN foo `5` ON `5`.title_type = 5 AND `5`.asset_id = o.asset_id 
WHERE 
    o.title_type = "4" 
    AND o.title = "BLSH" 

Try my example on SQLfiddle

+0

作品!私は問題を説明するためにテーブルを単純化しているかもしれませんが、より良い構造を作るためのどのような洞察も大きく分かれています!本当にありがとう! – jackpass

関連する問題