【发布时间】:2023-03-05 10:05:01
【问题描述】:
我正在跟踪许多类似网站上的访问者移动,并已分配目标以跟踪每个目标的不同值。由于这些目标是动态创建的,因此我还需要动态更新它们。 mysql 结构的相关部分如下,它在 2 个站点上描述了相同的 4 个目标。 注意:每个站点的目标始终相同。
CREATE TABLE IF NOT EXISTS `goals` (
`idsite` int(11) NOT NULL,
`idgoal` int(11) NOT NULL,
`name` varchar(50) NOT NULL,
`allow_multiple` tinyint(4) NOT NULL,
`revenue` float NOT NULL,
PRIMARY KEY (`idsite`,`idgoal`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `goals` (`idsite`, `idgoal`, `name`, `allow_multiple`, `revenue`) VALUES
(10, 1, 'Product Benefits Video', 0, 2),
(10, 2, 'Agent Benefits Video', 0, 4),
(10, 3, 'Social Network Video', 0, 6),
(10, 4, 'MMP Overview Video', 1, 8),
(13, 1, 'Product Benefits Video', 0, 2),
(13, 2, 'Agent Benefits Video', 0, 4),
(13, 3, 'Social Network Video', 0, 6),
(13, 4, 'MMP Overview Video', 1, 8);
上面的插入命令是从一个数组中创建的,如下所示。
$config['trackings'][1] = array('name'=>'Product Benefits Video', 'value'=>'2', 'multi'=>'0');
$config['trackings'][2] = array('name'=>'Agent Benefits Video', 'value'=>'3', 'multi'=>'0');
$config['trackings'][3] = array('name'=>'Social Network Video', 'value'=>'4', 'multi'=>'0');
$config['trackings'][4] = array('name'=>'MMP Overview Video', 'value'=>'5', 'multi'=>'1');
我永远不需要删除目标,但我想知道如何更改值,如果目标不存在,请将其添加到所有网站。
如果我提供一个新数组的示例如下:
$config['trackings'][1] = array('name'=>'Product Benefits Video', 'value'=>'6', 'multi'=>'0');
$config['trackings'][2] = array('name'=>'Agent Benefits Video', 'value'=>'7', 'multi'=>'0');
$config['trackings'][3] = array('name'=>'Social Network Video', 'value'=>'8', 'multi'=>'1');
$config['trackings'][4] = array('name'=>'MMP Overview Video', 'value'=>'9', 'multi'=>'1');
$config['trackings'][5] = array('name'=>'MMP Details Video', 'value'=>'10', 'multi'=>'1');
我想添加目标 5 并更新每个站点的现有目标的值和 allow_multiple。
我考虑过截断表格并从头开始重写所有值,但有成千上万的网站。 我也玩过替换、插入更新并最终拔掉了我的头发。
有没有比清空批次更简单的方法?
编辑: 最终结果应该是这样的
(10, 1, 'Product Benefits Video', 0, 6),
(10, 2, 'Agent Benefits Video', 0, 7),
(10, 3, 'Social Network Video', 1, 8),
(10, 4, 'MMP Overview Video', 1, 9),
(10, 5, 'MMP Details Video', 1, 10),
(13, 1, 'Product Benefits Video', 0, 6),
(13, 2, 'Agent Benefits Video', 0, 7),
(13, 3, 'Social Network Video', 1, 8),
(13, 4, 'MMP Overview Video', 1, 9);
(13, 5, 'MMP Details Video', 1, 10);
编辑:这将很容易完成所有更新
foreach($config['trackings'] as $id => $track)
{
$s = "UPDATE `goals` SET `revenue` = ".$track['value'].", `allow_multiple` = ".$track['multi']." WHERE `idgoal` = '".$id."'";
}
但是如何同时添加缺失的目标(5)?
【问题讨论】:
标签: php mysql arrays multidimensional-array mysqli