0

「親」と「子」の行を持つデータベースがあります。同様のエントリですが、1 つのエントリはより具体的な子の汎用バージョンです。ただし、これらのエントリが特定の列で正確に一致するようにします。

これが私のデータベースの例です:

| ID |  IsChildOfID |   Food    |   Type        |
| 1  |              |           |   Fruit       |
| 2  |      1       |   Apple   |   Fruit       |
| 3  |      1       |   Pear    |   Vegetable   |
| 4  |      1       |   Banana  |   Vegetable   |
| 5  |              |           |   Vegetable   |
| 6  |      5       |   Lettuce |   Fruit       |
| 7  |      5       |   Celery  |   Vegetable   |
| 8  |      5       |   Cabbage |   Fruit       |

この例では、2 人の親と 6 人の子供がいます。「type」フィールドの値が一部の子と一致しません。データベース内の子を見つけて、一部の列のみで親の値に置き換えられるようにしたいと考えています。これは純粋な MySQL で可能ですか、それとも php で行う必要がありますか? ありがとう。

4

3 に答える 3

1

一般に、SQL で親子関係を使用する場合、それぞれに対して 2 つの別個のデータベース テーブルを作成する必要があります。あなたの場合、「types」というタイトルのデータベースを作成type_idし、子テーブルに for each 要素を含める必要があります。

子テーブル:

| ID |    TYPE_ID   |   Food    |
| 2  |      1       |   Apple   | 
| 3  |      2       |   Pear    |  
| 4  |      2       |   Banana  |   
| 6  |      1       |   Lettuce |  
| 7  |      2       |   Celery  | 
| 8  |      1       |   Cabbage |

タイプ テーブル:

| ID |        Type          |
| 1  |        Fruit         |
| 2  |       Vegetable      |

次に、型テーブルをループし、次のような sql ステートメントを使用して参照できます。

$types = mysql_query ( 'SELECT * FROM type_table');

WHILE ( $type = mysql_fetch_array ( $types ) )
{
 $sql = 'SELECT * FROM  child_table WHERE TYPE_ID = "' . $type['type'] . '"';
}
于 2012-09-28T21:39:52.653 に答える
1
UPDATE name_of_table SET Type = "Fruit" WHERE IsChildOfID = 1

UPDATE name_of_table SET Type = "Vegetable" WHERE IsChildOfID = 5
  • ただし、動的に実行したい場合は、php または他の言語を使用してください...

また、この種のデータには2つのテーブルを使用したいと思います...

于 2012-09-28T21:43:32.557 に答える
0

同様の回答: UPDATE multiple tables in MySQL using LEFT JOIN

私はこれを書くつもりでした:

UPDATE foods c
  JOIN foods p ON p.id = c.IsChildOfId 
   SET c.type = p.type
 WHERE p.isChildOfId IS NULL

しかし、上記のリンクをさらに読むと、ターゲットテーブルを参照できるかどうかわかりません。試すだけの価値があります。

于 2012-09-28T22:00:11.060 に答える