PHP Mysql在插入期间增加一列
对不起,让我解释一下。。。。recordID自动递增,是我的主键。。。。。LISTINGID引用不同表中的ID。在此表中,1需要为每个具有相同LISTINGID的记录增加recordListingID。我的insert语句最多插入10条具有相同LISTINGID的记录我需要recordListingID从1开始,以此类推 嗨,伙计们 我从php将记录插入mysql,它可以是1个或多个记录,我需要一个COL来递增,第一个条目是1,这是我的插入代码PHP Mysql在插入期间增加一列,php,mysql,increment,Php,Mysql,Increment,对不起,让我解释一下。。。。recordID自动递增,是我的主键。。。。。LISTINGID引用不同表中的ID。在此表中,1需要为每个具有相同LISTINGID的记录增加recordListingID。我的insert语句最多插入10条具有相同LISTINGID的记录我需要recordListingID从1开始,以此类推 嗨,伙计们 我从php将记录插入mysql,它可以是1个或多个记录,我需要一个COL来递增,第一个条目是1,这是我的插入代码 mysql_query("INSERT INTO
mysql_query("INSERT INTO car_listing_images (recordID, recordText, recordListingID, LISTINGID) VALUES ('', '$fileName', '??', '$listingid')");
我把它放在哪里了??是需要增加的列。我怎样才能做到这一点
提前谢谢 您可以使用MySql内置的自动增量功能
AUTO_INCREMENT
MySql会将指定的字段增加1(或您设置的任何间隔)我不知道我是否真正理解您的问题 如果您想用每条记录递增一列,则应将其定义为一列。这样,在您的
INSERT
语句中,如果在该列中插入NULL
,则每次都会上升
或者,您可以执行fieldname+1
,但始终首选AUTO_INCREMENT
根据我的评论,你可以这样做:
$row = mysql_fetch_assoc(mysql_query("SELECT MAX(recordListingID) AS `max` FROM car_listing_images"));
$next_id = $row['max'] + 1;
mysql_query("INSERT INTO car_listing_images (recordID, recordText, recordListingID, LISTINGID) VALUES ('', '$fileName', '$next_id', '$listingid')");
<?php
mysql_query('START TRANSACTION');
$recordListingId = mysql_result(mysql_query("SELECT count(*)+1 as num FROM car_listing_images WHERE LISTINGID=$listingid"), 'num', 0);
mysql_query("INSERT INTO car_listing_images (recordID, recordText, recordListingID, LISTINGID) VALUES ('', '$fileName', '$recordListingId', '$listingid')");
mysql_query('COMMIT');
?>
我仍然强烈建议不要这样做,使用自动增量
字段是一个更好的实现
在你最后的评论之后,我建议如下。您将无法在MySQL中直接执行此操作(除非您使用变量,但如果您同时插入多个RecordID,则可能会出错)
更改表结构以包含recordListingID列的属性,然后从insert中省略该列,使其自动填充增量数字
即:mysql_查询(“插入到汽车_列表_图像(recordID、recordText、LISTINGID))值(“,$fileName”,“$LISTINGID”)”) 您可以将变量初始化为1并使用:
您可以使用序言:如果您需要有两个字段递增,但没有相互关联,那么您可能做错了。最好不要使用
recordListingID
,而只使用recordID
,因为它们可能是相同的数字
如果您的表正在运行InnoDB
,则可以创建事务。然后,您可以尝试以下方法:
$row = mysql_fetch_assoc(mysql_query("SELECT MAX(recordListingID) AS `max` FROM car_listing_images"));
$next_id = $row['max'] + 1;
mysql_query("INSERT INTO car_listing_images (recordID, recordText, recordListingID, LISTINGID) VALUES ('', '$fileName', '$next_id', '$listingid')");
<?php
mysql_query('START TRANSACTION');
$recordListingId = mysql_result(mysql_query("SELECT count(*)+1 as num FROM car_listing_images WHERE LISTINGID=$listingid"), 'num', 0);
mysql_query("INSERT INTO car_listing_images (recordID, recordText, recordListingID, LISTINGID) VALUES ('', '$fileName', '$recordListingId', '$listingid')");
mysql_query('COMMIT');
?>
我想我知道你过去/现在想要完成什么。也许有更好的方法,但我所做的是“从表中选择max(id)+1作为nextId”,并将其存储在一个变量中,该变量用在您称为“recordListingID”的次要id字段中
这样,您插入的第一行将具有相同的id和recordListingID,但每一行将自动添加id,但recordListingID将与第一行相同
在我的情况下,一次只有一个用户在执行此操作,因此不会出现错误,但在多用户情况下,您可能需要修改此操作,以防有人同时执行插入操作。比如标记最后一行,这样您的查询就知道它已经完成了,这样您就可以像“select max(id)+1 as nextId from table where lastRow=1”之类的东西 对该字段使用自动递增…这不是答案,他想要一个非主键递增。这对我没有好处,因为我想要递增的列不包含唯一的数据。如果你不想要主键删除主键引用-那是我的错误。有什么理由这会被否决吗?请分享,如果我不正确,请告诉我。$mylid=0;mysql_查询(“插入汽车_列表_图像(recordID、recordText、recordListingID、LISTINGID)值(“'$fileName'、'$MyId+1'、'$LISTINGID'));不,抱歉,您需要在查询中执行此操作,我不确定在简单的insert语句中是否真的可以执行此操作。您可以在插入时使用内部计数器,或者选择MAX,查看我的更新答案(请稍候)。对不起,让我尝试解释一下。。。。recordID自动递增,是我的主键。。。。。LISTINGID引用不同表中的ID。在此表中,1需要为每个具有相同LISTINGID的记录增加recordListingID。我的insert语句最多插入10条具有相同LISTINGID的记录。我需要记录LISTINGID从1开始,以此类推。$next_id=0;foreach($insert as$insert_stmt){$next_id++;$insert_stmt=“insert-INTO-car_-listing_-listing_图像(recordID、recordText、recordListingID、LISTINGID)值(''$fileName'、'$next_id'、'$LISTINGID')”;$insert=mysql_-query($insert_stmt)或die(mysql_-error())}应该可以正常工作,是否有错误?尽管您应该注意,如果$insert
为空,它将不起作用。您应该改为使用带有特定计数的for
循环,或在数据数组上循环(即,每当需要运行查询时)。OK recordID已自动递增,对于每个recordID,recordListingID的值可以是1到10。许多RecordID在recordListingIDOkay中都可以有这些值,我在第一个sql查询中添加了一个“WHERE LISTINGID=$LISTINGID”
。这应该在您添加10项的循环中进行。每次添加具有相同LISTINGID
的项目时,它都将增加$recordListingId
。这还允许您稍后返回并添加具有相同LISTINGID
的记录,而无需跟踪值。