2017-01-07 4 views
0

私はしばらく検索しましたが、解決策が見つかりませんでした。私は2つのmysqlテーブルがあります。 オブジェクトおよびメタ。オブジェクトには、ページ、ポスト、カテゴリやものを説明し2つ以上のテーブルの結果タイトルとしてカラム名を使用

table object 
---------- 
id type 
各オブジェクトについて

追加情報は、私はIDが1の1つのオブジェクトを持っている場合は、テーブルのメタ

table meta 
----------------------------------------- 
id object_id meta_key meta_value 

に保存されていると私の2つの表は、この

のように見えている
object  | meta 
--------- | ------------------------- 
1 post | 1 1 title a title 
       2 1 content a content 

この

object_id type title content 
------------------------------------- 
1   post a title a content 
01のような出力を生成する方法はあります

フィールドが10,20、またはそれ以上ある場合でも、ここにはsqlfiddle(編集済み)のリンクがあります。ありがとうございました。

+0

がhttp://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-toを見るお試しください-me-to-be-a-very-simple-sql-query - ピボットを参照することもできますが、データ表示の一般的な問題はアプリケーションコードで最もよく解決されます。 – Strawberry

+0

ありがとう、私はsqlfiddleへのリンクを追加しました。 –

+0

は、あらかじめわかっている(たとえそれらがクエリでハードコーディングできるように)、20以上であってもすべてのフィールド名ですか? –

答えて

1

select o.id, o.type, om.title, om.content 
from object o left join (
    select object_id, 
    max(case when meta_key = 'title' then meta_value end) as title, 
    max(case when meta_key = 'content' then meta_value end) as content 
    from object_meta 
    group by object_id) om on o.id = om.object_id 
+0

本当に素敵なアイデア、私の新しいスキルに感謝します;)残念ながら、それは期待した結果を与えません。とにかく、ありがとうございます –

+0

不足している 'type'属性については、編集済みの記事をご覧ください。 –

+0

私は自分の悪い私はハードコードされたキーワードを使用することはできません言ったように、それはタイトルとコンテンツのためにのみ動作します。私はmeta_keyのようなものが必要です(meta_keyの場合はmeta_valueの終わり)meta_keyとして、meta_keyは列の見出しでなければなりません。私の悪い英語のために申し訳ありません。 –

関連する問題