如何将同一查询插入的所有记录混为一谈?

时间:2012-07-25 20:41:27

标签: php mysql

我有一个表,其中包含一个标识一组值的数字。每次将值数组加载到数据库中时,此数字都会递增,因此对于在给定时间插入的每个值,此数字将重复。

如何获取此数字并添加1以便我可以使用表单通过PHP输入新值?

如果有更好的方法,我会很高兴知道。

由于

3 个答案:

答案 0 :(得分:1)

按递增列降序排列表格,并将结果限制为仅第一行。这将是最高价值。

SELECT incrementing_column 
FROM table 
ORDER BY incrementing_column DESC 
LIMIT 1

答案 1 :(得分:1)

您需要考虑并发问题。例如,当您有两个用户分别向表中添加“新”数字数组时,您可能不希望它们使用相同的序列号。因此,您需要进行某种“原子”操作,以防止它们返回相同的序列号。

(我将在这里假设一个整数值对于“序列”数字是可接受的,在你的问题中没有任何迹象表明它不是。)

一种方法是定义一个只包含一个带有“序列”号的列的表,定义为AUTO_INCREMENT,如下所示:

CREATE TABLE seq (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY);

然后,要获取“新”ID号,只需在表中执行INSERT,然后检索自动生成的id值。您的SQL语句可能如下所示:

INSERT INTO seq (id) VALUES (NULL);
SELECT LAST_INSERT_ID() AS id;

还有其他(更简单)方法可以检索LAST_INSERT_ID的值,但具体方法取决于您使用的是mysqli(mysqli_insert_id)还是PDO(lastInsertId)。

这种方法是我(在MySQL中)最接近Oracle风格的SEQUENCE对象。

还有其他方法,但有些方法从根本上被打破(因为它们可能会返回重复值),有些方法会对并发产生负面影响(因为它们锁定表以防止并发检索和/或更新。)

答案 2 :(得分:-2)

您可能需要查看MySQL的自动增量功能。

http://www.w3schools.com/sql/sql_autoincrement.asp

这将允许您识别单个ID字段,每次输入新记录时都会自动递增,而不必指定值。