PHP / MySQL:同步表中的两个字段

时间:2014-08-04 11:29:47

标签: php mysql

我需要同步两个不同的预订日历,因为两个日历都预订同一个房间(或同一个活动)。

因此,如果客户在calendar_01中预订了一天(和小时),则该值(预订日期和小时)将在calendars_02中自动更新(反之亦然)。

按照上次(最近一次预订)的顺序更新(并重写新值)而不连续循环非常重要。

MySql DB

我正在使用插件,在“日历”数据库中有一个名为“days”的表,在此表中我可以看到:

+--------------+-------------+------------+------+----------------------------------------------------------+
| unique_key   | calendar_id | day        | year | data                                                     |
+--------------+-------------+------------+------+----------------------------------------------------------+
| 1_2014-08-20 | 1           | 2014-08-20 | 2014 | available h10-12; booked h12-14; in pending h14-16;      |
| 2_2014-08-20 | 2           | 2014-08-20 | 2014 | available h 10 - 12; available h12-14; available h14-16; |
| 1_2014-08-21 | 1           | 2014-08-21 | 2014 | available h10-12; available-14; available h14-16;        |
| 2_2014-08-21 | 2           | 2014-08-21 | 2014 | booked h10-12; booked h12-14; in pending h14-16;         |
+--------------+-------------+------------+------+----------------------------------------------------------+

简化:列“data”包含记录每次重新预订的值(TEXT类型),因此:

+--------------+-------------+------------+------+--------------+
| unique_key   | calendar_id | day        | year | data         |
+--------------+-------------+------------+------+--------------+
| 1_2014-08-20 | 1           | 2014-08-20 | 2014 | text value A |
| 2_2014-08-20 | 2           | 2014-08-20 | 2014 | text value B |
| 1_2014-08-21 | 1           | 2014-08-21 | 2014 | text value C |
| 2_2014-08-21 | 2           | 2014-08-21 | 2014 | text value D |
+--------------+-------------+------------+------+--------------+

我需要更新相同列“data”的值,如下所示:

+--------------+-------------+------------+------+--------------+
| unique_key   | calendar_id | day        | year | data         |
+--------------+-------------+------------+------+--------------+
| 1_2014-08-20 | 1           | 2014-08-20 | 2014 | text value A |
| 2_2014-08-20 | 2           | 2014-08-20 | 2014 | text value A |
| 1_2014-08-21 | 1           | 2014-08-21 | 2014 | text value D |
| 2_2014-08-21 | 2           | 2014-08-21 | 2014 | text value D |
| 1_2014-08-22 | 1           | 2014-08-22 | 2014 | text value X |
| 2_2014-08-22 | 2           | 2014-08-22 | 2014 | text value X |
| 1_2014-08-23 | 1           | 2014-08-23 | 2014 | text value Y |
| 2_2014-08-23 | 2           | 2014-08-23 | 2014 | text value Y |
+--------------+-------------+------------+------+--------------+

非常感谢您的任何帮助!

1 个答案:

答案 0 :(得分:1)

我强烈建议不要同步/数据复制。你需要全天候运行一个deamon,遇到问题的风险要高得多,它也不那么有效,因为它必须继续检查两个表中的新数据,这也意味着延迟人们在网站上看到他们的新预订。当调度器出现问题时,调试就不那么容易了。

以下解决方案更容易调试,更高效。我建议你为数据编写抽象的CRUD代码:创建,读取,更新和删除。创建和更新可能是您最感兴趣的,您会做的是这样的:

<?php
function create($id, $data)
{
    $id = mysql_real_escape_string($id);
    $data = mysql_real_escape_string($data['data']);
    mysqL_query("INSERT INTO calendars (unique_key,data) VALUES('".$id."','".$data."')");
    mysqL_query("INSERT INTO days (unique_key,data) VALUES('".$id."','".$data."')");
}
function update($id, $data)
{
    $id = mysql_real_escape_string($id);
    $data = mysql_real_escape_string($data['data']);
    mysqL_query("UPDATE calendars SET data = '".$data."' WHERE unique_key = '".$id."'");
    mysqL_query("UPDATE days SET data = '".$data."' WHERE unique_key = '".$id."'");
}
create('1_2014-08-20', array(
    'data' => 'data here'
));
update('1_2014-08-20', array(
    'data' => 'data here'
));

这就像将数据传入其中一样简单。如果你修改了SQL结构,你可以创建一个新的抽象集函数/类,它们遵循新的数据库结构,就像交换包含一样简单。