v2.5.2
Giriş yap

SQL Çoklu Insert

szrcmk
727 defa görüntülendi

Merhaba,

Aşağıdaki gibi bir insert kodum var, aynı anda aynı verileri bir başka tabloya kopyasını atmak istiyorum. Tüm alanlar aynı sadece tablo isimleri {acct_table1} ve {acct2_table1} nasıl yapabilirim bu işlemi ?

   accounting_start_query = " 
          INSERT INTO ${acct_table1} 
            (acctsessionid,    acctuniqueid,     username, 
             realm,            nasipaddress,     nasportid, 
             nasporttype,      acctstarttime,    acctstoptime, 
             acctsessiontime,  acctauthentic,    connectinfo_start, 
             connectinfo_stop, acctinputoctets,  acctoutputoctets, 
             calledstationid,  callingstationid, acctterminatecause, 
             servicetype,      framedprotocol,   framedipaddress, 
             acctstartdelay,   acctstopdelay,    xascendsessionsvrkey) 
          VALUES 
            ('%{Acct-Session-Id}', '%{Acct-Unique-Session-Id}', 
             '%{SQL-User-Name}', 
             '%{Realm}', '%{NAS-IP-Address}', '%{NAS-Port}', 
             '%{NAS-Port-Type}', '%S', NULL, 
             '0', '%{Acct-Authentic}', '%{Connect-Info}', 
             '', '0', '0', 
             '%{Called-Station-Id}', '%{Calling-Station-Id}', '', 
             '%{Service-Type}', '%{Framed-Protocol}', '%{Framed-IP-Address}', 
             '%{%{Acct-Delay-Time}:-0}', '0', '%{X-Ascend-Session-Svr-Key}')"
arcface
1843 gün önce

Php tagını seçtiğin için bir yöntem söylüyorum recursive fonksiyon mantığını kullan sorguyu gönder değer olarak 2 inci parametre de dizi içinde tablo isimleri gir acct_table1, acct_table2 diye 2 parametredeki değer sayısı kadar aynı fonksiyonu döndür her döngü de diğer tablo adını döndür. Örneğin;

function insert_recursive($sorgu,$array = []){
    $tabloadi = array_shift($array);
    $insertislemi = query('INSERT INTO '.$tabloadi.' '.$sorgu);
    if(count($array) > 1){
        insert_recursive($sorgu,$array);
    }
}
$sorgu = "(acctsessionid,    acctuniqueid,     username, 
             realm,            nasipaddress,     nasportid, 
             nasporttype,      acctstarttime,    acctstoptime, 
             acctsessiontime,  acctauthentic,    connectinfo_start, 
             connectinfo_stop, acctinputoctets,  acctoutputoctets, 
             calledstationid,  callingstationid, acctterminatecause, 
             servicetype,      framedprotocol,   framedipaddress, 
             acctstartdelay,   acctstopdelay,    xascendsessionsvrkey) 
          VALUES 
            ('%{Acct-Session-Id}', '%{Acct-Unique-Session-Id}', 
             '%{SQL-User-Name}', 
             '%{Realm}', '%{NAS-IP-Address}', '%{NAS-Port}', 
             '%{NAS-Port-Type}', '%S', NULL, 
             '0', '%{Acct-Authentic}', '%{Connect-Info}', 
             '', '0', '0', 
             '%{Called-Station-Id}', '%{Calling-Station-Id}', '', 
             '%{Service-Type}', '%{Framed-Protocol}', '%{Framed-IP-Address}', 
             '%{%{Acct-Delay-Time}:-0}', '0', '%{X-Ascend-Session-Svr-Key}')";
             
insert_recursive($sorgu,["acct_table1","acct2_table1"]);

Tabi bu örnek basit bir örnek içinde kontrol yok sorgu yerine gelmez ise işlem tamanınca dönecek cevap gibi şeyler yok mantığı anlaman için basit bir örnek verdim.