0

私はループSELECT(MAX())内で使用していますが、これが私のコードです:foreach

foreach($_POST['image_Basename'] as $key=>$image_Basename){


    $image_Title = $this->input->post('image_Title');

    $image_Category_Id = $this->input->post('image_Category_Id');


    $this->db->query("INSERT INTO mg_gallery (image_Group_Id, image_title, image_Basename, image_Category_Id)
                      SELECT 1 + coalesce((SELECT max(image_Group_Id) FROM mg_gallery), 0), '$image_Title', '$image_Basename', '$image_Category_Id'
    ");
}

image_Basename問題は、クエリごとに新しい番号が生成されることです。

たとえば、 3 を取得した場合image_Basenames、それらの 3 に対して 1、2、および 3 が挿入されimage_Basenamesます。しかし、すべてに同じ番号を挿入したいのですimage_Basenames

たとえば、image_Group_Id の最大数が 1 の場合、image_Basename ごとに 2 を追加します。どうやってやるの?!入れました

SELECT 1 + coalesce((SELECT max(image_Group_Id) FROM mg_gallery

ループの外ですが、foreachうまくいきませんでした!!!

答えは自分で以下に追加します

4

4 に答える 4

1

EDITED 2
これが機能するかどうかを試してください。

$maxRs  = $this->db->query('SELECT max(image_Group_Id) AS max FROM mg_gallery');
echo $this->db->last_query();die;  #run this query in your phpmyadmin and debug it.
if($maxRs->num_rows() > 0){
    $maxData    = $maxRs->row_array();
        echo "here :".$maxID  = $maxData['max'];die;
    }else{
        $maxID  = 0;
}
//echo "max : ".$maxID;die;   #check if its returning the corrent maxid or not.
foreach($_POST['image_Basename'] as $key=>$image_Basename){
    $image_Title = $this->input->post('image_Title');
    $image_Category_Id = $this->input->post('image_Category_Id');
    $this->db->query("INSERT INTO mg_gallery (image_Group_Id, image_title, image_Basename, image_Category_Id)
                      $maxID, '$image_Title', '$image_Basename', '$image_Category_Id'
    ");
    echo $this->db->last_query();die;  #check the query its generating is correct or not and run directly at phpmyadmin
}
于 2013-08-22T11:44:15.420 に答える
0

あなたが持っているデータの種類と正確に何を望んでいるかは完全にはわかりませんが、正しい方向に向けてお手伝いします。

$int_basename = (int)max($this->input->post('image_Basename'));
$str_image_title = $this->input->post('image_Title');
$str_image_category_id = $this->input->post('image_Category_Id');

$query   = $this->db->query("SELECT max(image_Group_Id) AS max FROM mg_gallery");
$int_max = (int)$query->row()->max;

$arr_union = array();
for($i = 1; $i <= 3; $i++)
    if ($i == 1)
        $arr_union = "SELECT " . ($int_max + $i) . " AS id";
    else $arr_union = "SELECT " . ($int_max + $i);

$str_union = implode(' UNION ', $arr_union);

$this->db->query("
INSERT INTO mg_gallery (image_Group_Id, image_title, image_Basename, image_Category_Id)
SELECT h.id, ?, ?, ?
FROM ({$str_union}) AS h
", array($str_image_title, $int_basename, $str_image_category_id));

これにより、クエリが2 回だけ実行され、データベースがループ クエリの問題を回避できます。$this->db->query()また、 mysql インジェクションを回避するために、値をエスケープしました。INSERT ... SELECTこれで十分なので、実際には必要ありませんINSERT ... VALUES

于 2013-08-22T11:45:02.430 に答える