1

mysqlにテーブルがあり、それを呼び出しましょうfoo。列の数には制限があります。

| id | name |    date    |
--------------------------
| 1  | bar  | 2012-05-08 |
| 2  | buba | 2012-05-09 |

私のユーザーはテーブルにレコードを追加できますfoo_field(、、、code...descriptionなどtime)。

| id | name        |
--------------------
| 1  | code        |
| 2  | description |
| 3  | time        |

テーブルfoo_field_valueには、次のようにユーザー定義フィールドの値が格納されます。

| id | foo_id | foo_field_id | value     |
------------------------------------------
| 1  | 1      | 1            | b         |
| 2  | 1      | 2            | Lalalala  |
| 3  | 1      | 3            | 12:00     |
| 1  | 2      | 1            | c         |
| 2  | 2      | 2            | We are go |
| 3  | 2      | 3            | 14:00     |

理想的には、次のような結果が得られるクエリが1つ必要です。

| id | name | date       | code | description | time  |
------------------------------------------------------
| 1  | bar  | 2012-05-08 | b    | Lalalala    | 12:00 |
| 2  | buba | 2012-05-09 | c    | We are go   | 14:00 |

これは、すべてのfoo_fieldのfoo_fields_valueテーブルで内部結合を実行しなくても可能ですか(最初に別のクエリを実行してPHPでクエリを生成します)。

4

2 に答える 2

2

たった1つでそれを行うことが可能で、非常に簡単です。

foo_fieldテーブルを少し変更して、fooテーブルのid列に対応する列を追加します。これが主キーであると想定しています。

だから今私たちは持っています

* foo
|------|
| id   |
| name |
| date |
|------|

* foo_field
|-------------|
| foo_id      |
| code        |
| description |
| time        |
|-------------|

つまり、1つの簡単なクエリでフィールドを追加できます。

SELECT * FROM foo
LEFT JOIN foo_field ON foo.id = foo_field.foo_id

これにより、次の結果セットが得られます

| id | name  |       date | foo_id | code   | description |     time |
|----+-------+------------+--------+--------+-------------+----------|
|  1 | asdw  | 2012-05-16 |      1 | asdasd | asdasd      | 15:03:41 |
|  2 | fdgfe | 2012-05-18 |      2 | asdas  | asdas       | 15:03:41 |
|  3 | asdw  | 2012-05-16 |      3 | asdas  | asdas       | 15:03:52 |
|  4 | fdgfe | 2012-05-18 |      4 | asdasd | asdasd      | 15:03:52 |

あなたの質問を確かに理解したかどうかはまだわかりません。真に動的な値とデータ構造を作成する場合は、シリアル化された配列をデータベースのTEXTフィールドに保存することをお勧めしますが、その場合はソリューションを見落とすこともお勧めします。ソリューションを拡張できるようにする場合は、可能な限り厳密な構造を管理する必要があります。

于 2012-05-08T13:12:52.517 に答える
0

あなたが探しているのはピボットクエリです。また、列に変換する必要のある動的フィールドがあるため、自動ピボットクエリの作成についてはこちらの記事を確認してください

http://www.artfulsoftware.com/infotree/queries.php#523

于 2012-05-08T13:11:18.557 に答える