0

2 つの MySQL データベース テーブルがあります。

キャンピングカー

-----------------------
| id  | status | name |
-----------------------
|  1  | active | mh 1 |
|  2  | active | mh 2 |
-----------------------

キャンピングカー_メタ

----------------------------------------------
| id  | motorhome_id | meta_key | meta_value |
----------------------------------------------
|  1  | 1            | size     | large      |
|  2  | 1            | fuel     | petrol     |
|  3  | 2            | size     | small      |
|  4  | 2            | fuel     | petrol     |
----------------------------------------------

motorhome必要なのは、テーブルの値を使用して、テーブルから行を選択できるクエリですmotorhome_meta。言い換えれば motorhome、ID 1 のテーブル内の行を選択していた場合です。

----------------------------------------
| id  | status | name | size  | fuel   |
----------------------------------------
|  1  | active | mh 1 | large | petrol |
----------------------------------------

テーブルに対して where ステートメントを使用する必要がある場合がありWHERE motorhome.status='active'ますWHERE motorhome_meta.meta_key='size'

4

2 に答える 2

5

で集計関数を使用してCASE、データの行から列を作成できます。

select m.id,
  m.status,
  m.name,
  max(case when h.meta_key= 'size' then h.meta_value end) size,
  max(case when h.meta_key= 'fuel' then h.meta_value end) fuel
from motorhome m
inner join motorhome_meta h
  on m.id = h.motorhome_id
-- where m.id = 1
group by   m.id, m.status, m.name

SQL Fiddle with Demoを参照してください。これにより、次の結果が得られます。

| ID | STATUS | NAME |  SIZE |   FUEL |
---------------------------------------
|  1 | active | mh 1 | large | petrol |
|  2 | active | mh 2 | small | petrol |

組み合わせにUNIQUE制約がある場合は、このバリエーションを使用することもできます。(motorhome_id, meta_key)

select m.id,
  m.status,
  m.name,
  h1.meta_value  size,
  h2.meta_value  fuel
from motorhome m
left join motorhome_meta h1           -- or:  inner join
  on  m.id = h1.motorhome_id          -- depending on your need (or not)
  and h1.meta_key = 'size'            -- to show motorhomes
left join motorhome_meta h2           -- that have  only 'fuel'
  on  m.id = h2.motorhome_id          -- or only 'size'
  and h2.meta_key = 'fuel' ; 

参照: SQL-Fiddle-2

于 2013-04-05T17:56:44.373 に答える