根据另一个表mysql的顺序动态更改表数据

时间:2014-06-23 22:27:27

标签: php mysql

mysql的新手,需要一些帮助!我有2个表 - 表A和表B,它们设置如下:

表A - event

Event   | Date       |  Time
=====
1       | 2014-07-06 | 9am
2       | 2014-08-08 | 10am
3       | 2014-10-10 | 10am

表B - location

Event   | Date       |  Description | Directions*
=====
1       | 2014-08-08 | Grand Canyon | bar
2       | 2014-10-06 | Devils Tower | foo
3       | 2014-07-06 | Pacific Park | foo
3       | 2014-07-06 | Universal Studios | foo

现在我遇到的麻烦是如何正确地重新排序或交换表B中的值 - 位置。根据表A -event。如何更新位置表以便正确更改?

基本上我需要找到所有先前的事件值并使用新的事件值更新它们。

这是表B的结果 - 我希望在表A事件发生变化时看到的位置。

表B - location

Event | Date         |  Description | Directions
=====
1       | 2014-07-06 | Pacific Park | foo
1       | 2014-07-06 | Universal Studios | foo
2       | 2014-08-08 | Grand Canyon | bar
3       | 2014-10-06 | Devils Tower | foo

我忘了提到我需要能够遍历并查找所有实例。以及

2 个答案:

答案 0 :(得分:0)

如果您使用的是InnoDB存储引擎,则可以在外键约束定义上指定ON UPDATE CASCADE规则:

ALTER TABLE `location`
  ADD CONSTRAINT FK_location_event (event) REFERENCES event (event)
  ON UPDATE CASCADE;

然后(只要会话中没有禁用FOREIGN_KEY_CHECKS),当您发出UPDATE语句来更改event表中event列的值时,location表中的相关行{1}}表也将被修改。

例如,如果您发出以下声明:

UPDATE `event` SET `event` = 4 WHERE `event` = 1;

这大致相当于执行这两个陈述:

UPDATE `event` SET `event` = 4 WHERE `event` = 1;
UPDATE `location` SET `event` = 4 WHERE `event` = 1;

答案 1 :(得分:0)

我建议将日期和时间移到表B中,以防事件发生在2个不同时间的2个不同位置......现在你的数据暗示事件可能发生在多个地方,但它们必须发生在相同的日期和时间。

无论如何,如果您正在处理遗留表(并且您无法控制架构),请回答您的问题,您可以通过UI Controller代码执行此操作,或者您可以在表A上创建一个mysql触发器,更新表B日期......

如果您要询问现有数据...... 您可以通过“日期”和#39;来加入更新声明。柱: UPDATE location b JOIN event a ON b.Date = a.Date SET b.Event= a.Event

该声明将更新您的位置'表'事件'你事件中的身份证明'表,日期字段匹配