1

3 つの異なるテーブルからデータを取得する次のクエリを作成しました。

    SELECT
    product_searchables_names.class_name AS Class_Name,
    product_searchables_names.label AS Attribute_Label,
    jss_products.extrafield102 AS Attribute1,
    jss_products.extrafield103 AS Attribute2,
    jss_products.extrafield104 AS Attribute3,
    jss_products.extrafield105 AS Attribute4,
    jss_products.extrafield106 AS Attribute5,
    jss_products.extrafield107 AS Attribute6
    FROM
    product_searchables_categories 
    JOIN product_searchables_names ON product_searchables_categories.searchableID = product_searchables_names.ID
    JOIN jss_products ON product_searchables_categories.categoryID = jss_products.categories
    WHERE
    jss_products.productID = '134890'
    ORDER BY
    product_searchables_categories.searchable_order ASC

次の形式でデータを出力します

ここに画像の説明を入力

しかし、行1が「属性」1から値を選択し、行2が「属性2」などから値を選択するこの形式で必要です。

http://i50.tinypic.com/308bbcg.jpg

どうすればいいですか?

前もって感謝します

4

3 に答える 3

1

case ステートメントで何かを試すことができます http://dev.mysql.com/doc/refman/5.1/de/case-statement.htmlのように

select
    product_searchables_names.class_name AS Class_Name,
    product_searchables_names.label AS Attribute_Label,
    CASE 
        WHEN product_searchables_names.label = 'Resolution' THEN jss_products.extrafield104
        WHEN product_searchables_names.label = 'Networked?' THEN jss_products.extrafield106
        WHEN ...
    END
from
    product_searchables_categories
...

または、ラベルの代わりに class_name を使用します

于 2013-01-16T13:15:35.583 に答える
0

あなたが探しているのはピボットです。私は Oracle でそれを行う方法を知っていますが、mysql でそれを行う簡単な方法があるとは思いません。多くの場合、結果セットを取得した後にコードで実行する方が、SQL で実行するよりもはるかに簡単です。

これは、CASE を使用してそれを行う方法を説明する投稿です。これは、Oracle の方法に似ています。

GROUP BYを使用したmysqlピボットクエリの結果

于 2013-01-16T13:13:27.677 に答える
0

投稿した画像に基づいて、テーブルのピボットを解除する必要があるようです。jss_productsこのプロセスは、列である値を取得し、それを行に変換します。

したがって、クエリは次のようになります。

SELECT psn.class_name AS Class_Name,
    psn.label AS Attribute_Label,
    jp.Attribute
FROM product_searchables_categories psc
JOIN product_searchables_names psn
    ON psc.searchableID = psn.ID
JOIN
(
    select productID, categories, jp.extrafield102 as Attribute
    from jss_products jp
    union all
    select productID, categories, jp.extrafield103 as Attribute
    from jss_products jp
    union all
    select productID, categories, jp.extrafield104 as Attribute
    from jss_products jp
    union all
    select productID, categories, jp.extrafield105 as Attribute
    from jss_products jp
    union all
    select productID, categories, jp.extrafield106 as Attribute
    from jss_products jp
    union all
    select productID, categories, jp.extrafield107 as Attribute
    from jss_products jp
) jp    
    ON psc.categoryID = jp.categories
WHERE jp.productID = '134890'
ORDER BY psc.searchable_order ASC
于 2013-01-16T14:47:13.110 に答える