2011-05-10 103 views
2

对不起期间增加一列,让我跟你解释....的recordId自动递增,是我的主键..... LISTINGID指的是在ID不同的表。在这个表1中,需要为每个具有相同LISTINGID的记录增加recordListingID。我的插入语句最多可插入10条记录,它们具有相同的LISTINGID,我需要recordListingID以1开头,依此类推。PHP的MySQL插入

我插入记录到MySQL从PHP也可以是1条或更多的记录,我需要的cols之一,第一个条目这里是1递增是我的插入代码

mysql_query("INSERT INTO car_listing_images (recordID, recordText, recordListingID, LISTINGID) VALUES ('', '$fileName', '??', '$listingid')"); 

我在哪里放?是需要增加的列。我怎样才能做到这一点?

在此先感谢!

+0

使用'auto_increment' – 2011-05-10 10:44:30

+0

使用自动增量该字段..... – Pushpendra 2011-05-10 10:45:19

回答

2

您可以使用内置的MySQL的AUTO_INCREMENT功能

AUTO_INCREMENT 

http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

的MySQL将增加1指定的字段(或什么都间隔设置)

+0

这不是答案,他想要一个非主键增加 – ohmusama 2011-05-10 10:46:10

+0

那不适合我,因为我想要的山坳递增不保存唯一的数据。我已经这样做了recordID – Peter 2011-05-10 10:46:22

+0

如果你不想要一个主键删除主键Referance,那么 - 这是我的错误。 – LiamB 2011-05-10 10:46:43

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')"); 
} 
+0

$ mylid = 0; (“','$ fileName','$ mylid + 1','$ listingid')”); – Peter 2011-05-10 10:50:49

+0

那样?会工作? – Peter 2011-05-10 10:51:20

+0

不,对不起,您需要在查询中执行此操作,并且我不确定在简单的插入语句中是否真的有可能。插入时你可以有一个内部计数器,或者选择MAX,查看我更新的答案(给我一分钟)。 – 2011-05-10 10:57:48

0

改变你的表结构包括AUTO_INCREMENT属性为您recordListingID列,然后从插入省略列有一个递增的数字它自动填充。

I.e:mysql_query(“INSERT INTO car_listing_images(recordID,recordText,LISTINGID)VALUES('','$ fileName','$ listingid')”);

0

您可以初始化变量为1,使用post-increment operator

$value = 1; 
for(...){ 
    $sql = 'INSERT ...'; 
    $value++; 
} 
0

1前言:如果你需要有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

+0

确定recordID已自动递增,对于每个recordID recordListingID可以具有1到10的值。许多recordID可以具有这些recordListingID – Peter 2011-05-10 10:57:33

+0

好吧,我在第一个sql查询中加了一个''WHERE LISTINGID = $ listingid“'。这应该在您添加10个项目的循环中进行。每次添加具有相同'LISTINGID'的项目时,它都会增加'$ recordListingId'。这也将允许您稍后再回来并添加具有相同'LISTINGID'的记录,而不必跟踪这些值。 – ohmusama 2011-05-10 19:05:22

0

我想我知道你是/正在努力完成。可能有更好的办法,但我做的是“从表中选择max(id)+1作为nextId”,并将其存储在我称为“recordListingID”的辅助ID字段中使用的变量中。

这种方式您插入的第一行将具有相同的id和recordListingID,但每隔一行将auto_inc该id,但recordListingID将与第一行相同。

在我的情况下,一次只有一个用户这样做,所以不会有错误的机会,但在多用户的情况下,您可能想要修改这个以防止人们在同时。就像可能标记最后一行,以便您的查询知道它已完成,因此您可以像“select max(id)+1 as lastId from lastRow = 1”或类似的东西。