我有一个包含“父母”和“孩子”行的数据库。类似的条目,但一个条目是更具体的孩子的通用版本。但是,我希望这些条目在某些列中完全匹配。
以下是我的数据库示例:
| 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吗?感谢。
答案 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
此外,我更倾向于使用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
但是在进一步阅读上面的链接后,不确定您是否可以引用目标表。值得一试。