抱歉,让我试着解释一下.... recordID自动增量并且是我的主键..... LISTINGID是指不同表中的ID。在此表1中,需要为具有相同LISTINGID的每个记录增加recordListingID。我的insert语句最多插入10条具有相同LISTINGID的记录,我需要将recordListingID从1开始,依此类推。
大家好
我从php中将记录插入mysql它可以是1个或多个记录我需要一个cols来增加第一个条目为1这里是我的插入代码
mysql_query("INSERT INTO car_listing_images (recordID, recordText, recordListingID, LISTINGID) VALUES ('', '$fileName', '??', '$listingid')");
我放在哪里?是需要增加的col。我怎样才能做到这一点?
提前致谢!
答案 0 :(得分:2)
您可以使用MySql的内置Auto_Increment功能
AUTO_INCREMENT
http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html
MySql会将指定字段增加1(或者你设置的间隔)
答案 1 :(得分:1)
答案 2 :(得分:0)
我不知道我是否真的理解你的问题。
如果您想要为每条记录增加一列,则应将其定义为AUTO_INCREMENT列。这样,在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')");
我仍然会认真地反对这一点,使用AUTO_INCREMENT
字段是一个非常强大的 更好的实现。
在您上次发表评论后,我会建议以下内容。您将无法直接在MySQL中执行此操作(除非您使用变量,但如果您也插入多个RecordID,则可能会出错)。
$next_id = 0;
foreach ($insert as $insert_stmt) {
$next_id++;
mysql_query("INSERT INTO car_listing_images (recordID, recordText, recordListingID, LISTINGID) VALUES ('', '$fileName', '$next_id', '$listingid')");
}
答案 3 :(得分:0)
更改表结构以包含recordListingID列的AUTO_INCREMENT属性,然后省略插入中的列以使其自动填充增量编号。
即:mysql_query(“INSERT INTO car_listing_images(recordID,recordText,LISTINGID)VALUES('','$ fileName','$ listingid')”);
答案 4 :(得分:0)
您可以将变量初始化为1并使用post-increment operator:
$value = 1;
for(...){
$sql = 'INSERT ...';
$value++;
}
答案 5 :(得分:0)
前言:如果你需要增加2个字段,但彼此没有联系,你可能做错了。最好不要使用recordListingID
而只使用recordID
,因为它们可能是相同的数字。
如果您的表正在运行InnoDB
,您可以创建交易。然后你可以尝试这样的事情:
<?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');
?>
如果您没有innodb,请尝试使用stored procedure。
答案 6 :(得分:0)
我想我知道你在/想要完成什么。可能有更好的方法,但我所做的是“从表中选择max(id)+1作为nextId”并将其存储在我称为“recordListingID”的辅助id字段中的变量中。
这样你插入的第一行将具有相同的id和recordListingID,但是每个其他行将auto_inc id,但recordListingID将与第一行相同。
在我的情况下,一次只有一个用户这样做,所以没有错误的可能性,但是在多用户情况下,你可能想要修改它以注意那些在同一时间插入的用户时间。比如可能标记最后一行,所以你的查询知道它已经完成,所以你可以像“select max(id)+1 as nextId from lastRow = 1”或类似的东西。