2013-03-07 61 views
0

我有一個INSERT循環,我需要給它添加一個參考數字。我需要循環中的所有參考數字都是相同的。我知道用MAX()我可以選擇表中最高的數字。但是,如果我循環它會增加每個循環,而我需要它保持不變。多次循環中的最大值數

有沒有在查詢本身做到這一點的方法?或者是將其保存在循環外的變量中的唯一方法?

示例代碼:

for($i=2;$i<=$row_count;$i++){ // Loops 3 times (example) 
    $part = $vehicle.'_part'.$i; 
    $description = $vehicle.'_description'.$i; 
    $imageName = $vehicle.'_image'.$i; 
    $parts[] = array(
     'part' => $_SESSION[$part], 
     'image' => $_SESSION[$part], 
     'description' => $_SESSION[$description]); 
    } 

    foreach($parts as $onePart){  
      $queries[] = "INSERT INTO searches_tbl (ref_nr, vozila_id, korisnici_id, part, description, image) 
         VALUES (???, (SELECT id FROM vozila_tbl ORDER BY id DESC LIMIT 1), 
          (SELECT id FROM korisnici_tbl WHERE email = '".$email_address."' ORDER BY id DESC LIMIT 1), '".$onePart['part']."', '".$onePart['description']."', '".$onePart['image']."')"; 
    } 
+0

是要添加任意此參考號碼?爲什麼不直接執行INSERt ...(reference_column,...其他列)VALUES(123,(SELECt ...))? – Trent 2013-03-07 19:12:24

+0

它需要每次增加一個。但不在循環內。所以如果它循環3次,表中最高的數字是100,那麼它需要全部3次。 – 2013-03-07 19:15:22

+0

因此,檢索循環外的最大值。雖然這會給你帶來併發性問題。要做到這一點,唯一的方法就是將所有這些變成一個包裝在一個事務中的查詢。 – Stu 2013-03-07 19:19:04

回答

1

您可以創建一個新表,即searches_ref只有一個AUTO_INCREMENT主鍵列。

CREATE TABLE searches_refid INT NOT NULL AUTO_INCREMENT PRIMARY KEY );

然後,您將在循環前在searches_ref中插入一條新行,並獲取可用於循環的新ID。

這樣,你不應該有併發問題(你可能會得到使用MAX()