2011-10-02 71 views
0

我有一個PHP腳本,根據從MySQL數組中選擇的行將行插入到表中。將公共ID分配給MySQL數組中的多行插入

的代碼行插入新表:

$sql="insert into loaddetails (CaseNo,GrossMass,CaseStatus,Customer) 
select `case no`,`gross mass`,`case status`, customer from 
availablestock where `case no` = '$val'"; 

我要指派所有插入的行相同的ID,以便多個stock項目共享相同的LoadID。

我該如何修改我的代碼才能這樣做,以便所有插入的記錄都共享相同的ID,並且ID對於加載是唯一的。

我想我可以使用下面的代碼來獲取最大ID和一個

SELECT max(loadid)+1 from loaddetails 

我怎樣才能達致這增加了嗎?我意識到我的PHP代碼是不完美的,但它是功能性的,我只需要添加的功能以允許行具有共同ID插入到產生如下結果:

enter image description here

謝謝提前協助。

問候, 萊恩史密斯

完整代碼:

<?php 
    mysql_connect("localhost", "user", "password")or die("cannot connect");  
    mysql_select_db("databasename")or die("cannot select DB"); 
    $sql="SELECT `case no`,`customer`,`gross mass`, `case status` from availablestock where transporttypename= 'localpmb'"; 
    $result=mysql_query($sql); 
    $count=mysql_num_rows($result); 
?> 
<table border=1> 
    <tr> 
     <td> 
      <form name="form1" method="post"> 
       <table> 
        <tr> 
         <td>#</td> 
         <td>Case Number</td> 
         <td>Customer</td>  
         <td>Weight</td> 
         <td>Status</td> 
        </tr> 
<?php 
    while($rows=mysql_fetch_array($result)){ 
?> 
        <tr> 
         <td><input type="checkbox" name=check[] value="<?php echo $rows['case no']; ?>"></td> 
         <td><?php echo $rows['case no']; ?></td> 
         <td><?php echo $rows['customer']; ?></td> 
         <td><?php echo $rows['gross mass']; ?></td> 
         <td><?php echo $rows['case status']; ?></td> 
        </tr>         

<?php 
    } 
?> 
        <tr> 
         <td><input name="planlocalpmb" type="submit" id="planlocalpmb" value="planlocalpmb"></td> 
        </tr> 
        <?php 



          $check=$_POST['check']; 

         if($_REQUEST['planlocalpmb']=='planlocalpmb'){ 
{ 
          $sql="insert into loaddetails (CaseNo,GrossMass,CaseStatus,Customer) select `case no`,`gross mass`,`case status`, customer from availablestock where `case no` = '$val'"; 

          foreach($check as $key=>$value) 
          { 
          $sql="insert into loaddetails (CaseNo,GrossMass,CaseStatus,Customer) select `case no`,`gross mass`,`case status`, customer from availablestock where `case no` = '$value'"; 
          $final=mysql_query($sql); 
          if($final) 
          { 
          echo "<meta http-equiv=\"refresh\" content=\"0;URL=php.php\">"; 
          }           } 
           } 
           } 
        // Check if delete button active, start this 



// if successful redirect to php.php 

mysql_close(); 
?> 
</table> 
</form> 
</td> 
</tr> 
</table> 
+0

做u想相同的負載分配id的所有行?或者什麼是具有相同加載ID的常見事物? – diEcho

+0

嗨,對於數組中所有選定的行,當插入新表時應該有相同的loadid。 loadid是常用鏈接,因此一個loadid將在其上有多個案例。 loadid代表實際卡車和卡車上的貨物。謝謝 – Smudger

回答

0
INSERT INTO loaddetails (LoadID, CaseNo, GrossMass, CaseStatus, Customer) 
SELECT (SELECT MAX(loadid)+1 FROM loaddetails) LoadID, CaseNo, GrossMass, CaseStatus, Customer 
FROM availablestock WHERE CaseNo = '$val' 

確保LoadID有一個指標!

您可能需要先鎖定表格。我不確定。

我沒有檢查代碼的其餘部分,但是我發現你有一個SQL注入漏洞。

+0

大家好,@Ariel。感謝您的回覆和建議。您給我的查詢在PHPMyAdmin中正常工作100%。當我將查詢插入到我的PHP代碼中時,它不再起作用。如果我替換PHP代碼中的變量,則將行插入到mysql表中,但LoadID字段對於mysql中的所有行都分配了相同ID的每行都遞增1。關於如何修改PHP代碼的任何想法,所以它的工作原理?謝謝 – Smudger

+0

你確定你沒有在循環中做這個插入?循環中的每個循環都將遞增1。 – Ariel

+0

大家好,@Ariel。說實話,我並不完全確定,因爲我是一個真正的新手,但我認爲它正在循環中處理。使用您提供的MySQL腳本,我已經獲得了PHP腳本來執行MySQL插入語句。但是,MySQL表中的輸出不包含公共ID,而是增加了ID。我需要所有插入的行共享相同的ID。請告訴我哪裏出錯了。謝謝,瑞安 – Smudger

0

你還可以嘗試:

INSERT INTO loaddetails 
    (LoadID, CaseNo, GrossMass, CaseStatus, Customer) 
SELECT m.NewLoadId, CaseNo, GrossMass, CaseStatus, Customer 
FROM availablestock 
    CROSS JOIN 
    (SELECT MAX(loadid)+1 AS NewLoadId 
     FROM loaddetails 
    ) AS m 
WHERE CaseNo = '$val' 
+0

大家好,ypercube。我確實按照你的建議嘗試了,它可以在PHP腳本中工作。但問題在於mysql表中的輸出沒有所有插入行的公共標識。根據上面的@Ariel,這很可能是循環的結果。我如何修改PHP來處理具有相同loadid的所有行。謝謝您的幫助。 – Smudger

+0

什麼循環?我的答案和@Ariel的一個沒有循環...... –

+0

啊,你的意思是你有許多'$ val'值,你用一個單獨的調用來處理每個值。 –