PHP / Mysql从前一行增加一个

时间:2014-03-13 22:11:27

标签: php mysql sql

我希望从表中的最新行获取自动递增的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>';
?>

2 个答案:

答案 0 :(得分:1)

如果修改查询以在递增后选择值,该怎么办?即。

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

答案 1 :(得分:0)

所以,如果我理解,你有两个字段,而不是一个:

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),所以总而言之,我认为这最好留给有知识的人具体领域。