繁体   English   中英

PHP / Mysql从上一行递增1

[英]PHP / Mysql increment by one from previous row

我正在寻找一个ID,该ID已从表中的最新行开始自动递增,并将其递增1,并将其附加到同一表的返回结果中。 因此,如果行ID为5并且tabledata结果为product5,则需要在php结果中将其更改为product6。 因此,当重新提交数据时,它与新行ID一致。

编辑:我需要显示它并在sql插入之前增加它,因为它也通过电子邮件发送给数据提交以供订购。 数据库插入只是保留订单记录。

当前代码显示结果:

$conn=mysql_connect(" "," "," ");
mysql_select_db("database",$conn);
$sql="SELECT * FROM table WHERE ID=(SELECT max(ID) FROM table)";
$rs=mysql_query($sql,$conn) or die(mysql_error());
$result=mysql_fetch_array($rs);

echo '<table>
<tr>
<td>Data: '.$result["tabledata"].'</td>
</tr>
</table>';
?>

如果修改查询以增加值后选择值,该怎么办。

SELECT ID+1 AS ID, /*all other fields of the table */ FROM table WHERE ID=(SELECT max(ID) FROM table)

因此,据我了解,您有两个字段,而不是一个:

id    tabledata
1     PO-01
5     product5

是“采购订单”字段,因此与前一个数字保持一致,只是一个数字不同(示例PO-01至PO-02)

首先想到的是无论如何不要在两个地方写这个数字。 你可以有

id    tabledata
1     PO-%02d
5     product%d

然后只要您拥有行数据,就可以使用

sprintf($row['tabledata'], $row['id'])

以获得tabledata的“人类可读”版本。 然后获取“下一个” ID,您可以这样做

sprintf($row['tabledata'], $row['id'] + 1)

否则,您需要从文本字段中提取数字 这要求您事先知道其格式 (例如,%d或%02d还是...?)。

如果像第一个示例(product5到product6)那样,它只是长度可变的数字,那么您可以

$table['tabledata'] = preg_replace('#\\d+$#', $table['id'] + 1);

上面的代码将用6替换最后一个数字序列(此处为5;例如为1701)。或者您可以使用preg_match和几乎相同的表达式捕获数字,仅在括号中将其递增并存储回去。

如果它是固定长度的数字序列(如第二个示例(PO-01至PO-02)),则只需使用substr

$size = 2; // Two-digit number

$num  = substr($table['tabledata'], -$size);
$prd  = substr($table['tabledata'], 0, -$size);

$table['tabledata'] = $prd . sprintf("%0{$size}d", $num + 1);

甚至更复杂的解决方案是将两个版本合并为一个“解码”函数,该函数将对前导零和数字长度进行计数,并使用此函数确定所使用的格式。 但是,在某些情况下会出现问题(例如,AB-99中的下一个号码不是AB-100,而是AC-00或AC-01),所以总的来说,我认为这最好留给有以下知识的人使用特定域。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM