MySQL:从“父母”更新“孩子”的值

时间:2012-09-28 21:36:38

标签: php mysql

我有一个包含“父母”和“孩子”行的数据库。类似的条目,但一个条目是更具体的孩子的通用版本。但是,我希望这些条目在某些列中完全匹配。

以下是我的数据库示例:

| 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吗?感谢。

3 个答案:

答案 0 :(得分:1)

通常,在sql中使用父/子关系时,应为每个关系创建两个单独的数据库表。在您的情况下,您应该创建一个名为“types”的数据库,并为子表中的每个元素包含type_id

实施例

子表:

| 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'] . '"';
}

答案 1 :(得分:1)

UPDATE name_of_table SET Type = "Fruit" WHERE IsChildOfID = 1

UPDATE name_of_table SET Type = "Vegetable" WHERE IsChildOfID = 5
  • 但是如果你想动态地使用它,请使用php或其他语言......

此外,我更倾向于使用2个表来获取此类数据......

答案 2 :(得分: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

但是在进一步阅读上面的链接后,不确定您是否可以引用目标表。值得一试。