0

EAV フィード リポジトリとして編成された 1 つのテーブルから結果を抽出する必要があります。必要なのは、リレーショナル テーブルのような結果を返すことです。私はそのようなスキーマを使用しています:

テーブル スキーマ

 meta table
-----------------------
idmeta  |  entity_identity(fk)  |  products_idproduct(fk)  |  products_feeds_idfeed(fk)  |  value                   |  
1       |                   1   |                       1  |                         1   |  First product first val |
2       |                   2   |                       1  |                         1   |  First product second val|
3       |                   1   |                       2  |                         1   |  2nd product first val   |
4       |                   2   |                       2  |                         1   |  2nd product second val  |
5       |                   1   |                       3  |                         1   |  3rd product first val   |
6       |                   2   |                       3  |                         1   |  3rd product second val  |

そのため、idfeed ごとにすべての製品からすべての値を抽出しようとしています。この場合、私は次のようなものを取得しようとしています:

欲しかった結果..

+----------------------+---------------------------+---------------------------+
| products_idproduct | field1                   | field2                       |
+--------------------+--------------------------+------------------------------+
|                  1 | First product first val  | First product second val     |
+--------------------+--------------------------+------------------------------+
|                  2 | 2nd product first val    | 2nd product second val       |
+--------------------+--------------------------+------------------------------+
|                  3 | 3rd product first val    | 3rd product second val       |
+--------------------+--------------------------+------------------------------+

私はいくつかの合体文を試してきましたが、MAX関数、または代わりにいくつかのNULL値のため、1行しか得られません..:

私が今しようとしていること..

SELECT DISTINCT products_idproduct 
     , MAX( IF(entity_identity = 1, value, NULL) ) as 'field1'
     , MAX( IF(entity_identity = 2, value, NULL) ) as 'field2'
FROM meta
WHERE products_feeds_idfeed = 1;

そして明らかに、これは最後の行(最後の製品)のみを返します..

+----------------------+---------------------------+---------------------------+
| products_idproduct | field1                   | field2                       |
+--------------------+--------------------------+------------------------------+
|                  3 | 3rd product first val    | 3rd product second val       |
+--------------------+--------------------------+------------------------------+

リレーショナル テーブルのようにすべての製品の結果を取得する方法について何かアイデアはありますか?

4

1 に答える 1

0

ここでいくつかの結合が必要だとアドバイスする人もいます...これは私が現在使用している文です(パフォーマンス統計を取得する必要があります:

SELECT PROD1.products_idproduct 
     , PROD1.value as 'field1'
     , PROD2.value as 'field2'
     , PROD3.value as 'field3'
     , PROD4.value as 'field4'
FROM meta PROD1 LEFT JOIN meta PROD2 
  ON (    PROD1.products_feeds_idfeed = PROD2.products_feeds_idfeed
      AND PROD1.products_idproduct = PROD2.products_idproduct)
     LEFT JOIN meta PROD3
  ON (    PROD1.products_feeds_idfeed = PROD3.products_feeds_idfeed
      AND PROD1.products_idproduct = PROD3.products_idproduct)
     LEFT JOIN meta PROD4
  ON (    PROD1.products_feeds_idfeed = PROD4.products_feeds_idfeed
      AND PROD1.products_idproduct = PROD4.products_idproduct)
WHERE
      PROD1.products_feeds_idfeed = 1
  AND PROD1.entity_identity = 1
  AND PROD2.entity_identity = 2
  AND PROD3.entity_identity = 3
  AND PROD3.entity_identity = 4;
于 2013-08-12T15:29:17.510 に答える