我希望从表中的最新行获取自动递增的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>';
?>
答案 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),所以总而言之,我认为这最好留给有知识的人具体领域。