如何在sql中复制和自动递增列?

问题描述

我已经很久没有编写代码了,所以请认为我是一个真正的基本用户

我正在实施 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 多列似乎开销很大...