0

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

这是我的数据库的示例:

| 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 个孩子。“类型”字段的值对于某些孩子来说是不稳定的。我希望能够在数据库中找到任何子项,并仅在某些列中将其替换为父项的值。纯MySQL可以做到这一点,还是我需要用php做到这一点?谢谢。

4

3 回答 3

1

一般来说,当你在sql中使用父子关系时,你应该为每个创建两个单独的数据库表。在您的情况下,您应该创建一个名为“类型”的数据库,并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'] . '"';
}
于 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 回答