问题描述
我已经很久没有编写代码了,所以请认为我是一个真正的基本用户。
我正在实施 vtiger 并试图通过直接使用数据库来使其更容易。
这是我的问题:
在我的表 vtiger_paiements 中,我有 2 列:paiements_tks_s1 和 paiements_tks_s1typepaiement。
我想复制这 2 列并将重复项自动增加到 s53(一个接一个,这意味着 paiements_tks_sntypepaiement 总是在 paiements_tks_sn 之后)。
我完全不知道该怎么做。
我真的不想在 vtiger 中创建 53x2 标签...
谢谢你的帮助
PS:一般来说。假设我有一个名为 payment1 的列。我想将此列复制 N 次,并将其命名为 payment2、payment3、payment4...paymentN。
解决方法
好的,让我们假设您有一个具有当前结构的表,例如:
payments
> id int(11) PRIMARY KEY AUTO_INCREMENT
> user_id int(11)
> payment1 int(11)
> paymentType1 int(11)
你想要做的是创建额外的列,以便你有最后两列的 53 对......
> payment2 int(11)
> paymentType2 int(11)
> payment3 int(11)
> paymentType3 int(11)
...
> payment53 int(11)
> paymentType53 int(11)
然后您只需要使用 ALTER TABLE
查询来添加列。
您可以生成如下查询:
$tableName = "payments";
$startingNumber = 2;
$endingNumber = 53;
echo "ALTER TABLE {$tableName}\n";
for ($i = $startingNumber; $i < $endingNumber+1; $i++) {
echo " ADD COLUMN payment{$i} int(11),\n";
echo " ADD COLUMN paymentType{$i} int(11)" . ($endingNumber === $i ? ";": ",\n");
}
您可以将 echo
更改为变量,然后在 for 循环之后在 PHP 中连接并运行它,或者将结果查询复制/粘贴到 PHPMyAdmin 中。
在 PPH 中运行
$tableName = "payments";
$startingNumber = 2;
$endingNumber = 53;
$sql = "ALTER TABLE {$tableName}\n";
for ($i = $startingNumber; $i < $endingNumber+1; $i++) {
$sql .= " ADD COLUMN payment{$i} int(11),\n";
$sql .= " ADD COLUMN paymentType{$i} int(11)" . ($endingNumber === $i ? ";": ",\n");
}
// Assuming that you have an active connection to the db
// and $mysqli is the mysqli object
$mysqli->query($sql);
但是,我建议您考虑一下您的数据库设计。在我看来,你可以简单地拥有一张像:
payment
> id
> user_id
> number -- If you want to number them specifically
> amount
> type
拥有 50 多列似乎开销很大...