2013-03-07 62 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()