4

私のデータベーステーブルが次のようになっているとしましょう:

page_table

| id | page_id | meta_id | value
----------------------------------------
| 1  | 2       | 1       | Testing value
| 2  | 2       | 2       | Small content
| 3  | 2       | 1       | Another value
| 4  | 2       | 2       | Tiny value
| 5  | 3       | 1       | Text
| 6  | 3       | 2       | Content
| 7  | 3       | 3       | New text

メタテーブル

| id | meta_id | meta_value
-------------------------------
|  1 | 1       | Big headline
|  2 | 2       | Small headline
|  3 | 3       | Extra headline
  • 「id」はインクリメンタルです。
  • 「page_id」はページ ID です。1 つのページに多くのメタと値を含めることができます。
  • 「meta_id」は、meta_table に接続されます。
  • 「値」には任意の文字列を指定できます。

質問

このデータを簡単に操作するために「仮想」SQL テーブルを作成できますか?

仮想テーブル - 私の提案

| id | page_id | Big headline  | Small headline | Extra headline
----------------------------------------------------------------
| 1  | 2       | Testing value | Small content  |
| 2  | 2       | Another value | Tiny value     |
| 3  | 3       | Text          | Content        | New text

上記は、ページ テーブルとメタ テーブルの両方からの同じ内容です。これが私の SQL に必要なものです。

どこまで来たか

SELECT * from page_table今回はしません。

4

3 に答える 3

4

あなたが正しいと理解したらCreate view、mysqlで読んで検索してみてください。この方法で「仮想データベース」を作成できます-Ex。Mahmoud Gamal のコードの一部と組み合わせる

于 2012-10-09T06:41:26.880 に答える
1

これは、次のクエリを使用して実現できます。

SELECT m.id, p.page_id,
  MAX(CASE WHEN meta_value = 'Big headline' THEN p.value END) AS 'Big headline',
  MAX(CASE WHEN meta_value = 'Small headline' THEN p.value END) AS 'Small headline',
  MAX(CASE WHEN meta_value = 'Extra headline' THEN p.value END) AS 'Extra headline'
FROM meta_table m
LEFT JOIN page_table p ON m.meta_id = p.meta_id
GROUP BY m.id, p.page_id;

このクエリをビューに入れることができます。

于 2012-10-09T06:39:32.063 に答える
0

投稿したような列ではなく、行だけでほぼ同じ方法でデータを取得する方法があります。

このクエリを実行する場合:

   select mt.meta_value, group_concat(pt.value SEPARATOR ", ") 
   from page_table pt,
   meta_table mt
   where pt.meta_id = mt.meta_id
   group by mt.meta_value;

これにより、必要なデータが取得されます。行ごとに1つの「列」があります。

Big headline    Testing value, Text, Another value
Extra headline  New text
Small headline  Small content, Content, Tiny value
于 2012-10-09T07:03:41.670 に答える