繁体   English   中英

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

[英]MySQL: Updating values of “children” from their “parents”

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

这是我的数据库的一个例子:

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

通常,在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'] . '"';
}
UPDATE name_of_table SET Type = "Fruit" WHERE IsChildOfID = 1

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

此外,我更愿意使用2个表格来处理这类数据......

类似的答案: 使用LEFT JOIN在MySQL中更新多个表

我打算写这个:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM