Autor Zpráva
anonymni
Profil *
Dobrý deň,

stojím pred problémom ako zapísať výsledok selectu:
SELECT SUM(download) as download, SUM(upload) as upload FROM zariadenie WHERE linka = '1'
do mysql.

Čiže: select mi spraví sčítanie hodnôt a potrebujem výsledok zapísať do inej tabuľky.

Ďakujem za pomoc
Kajman
Profil
insert into ...
select sum(...

viz. http://dev.mysql.com/doc/refman/5.5/en/insert-select.html
Taps
Profil
http://dev.mysql.com/doc/refman/5.5/en/insert-select.html
anonymni
Profil *
Ďakujem, len mám jeden problém teraz s tým:
INSERT INTO linka
(
    download,
    upload,
    time
)

SELECT 
    SUM( n.in_bytes_rate ),
    SUM( n.out_bytes_rate ),
    now();
FROM
    system.device as n,
    monitoring.linka as l
WHERE 
    n.linka = '1'

Dátum mi zapíše, avšak hodnoty mi nechce sčítať. Niekde je chybička?
Tori
Profil
Nechybí v selectu ještě GROUP BY linka ?
Kajman
Profil
anonymni:
Za now() nedávejte středník, tím dotaz ukončíte. Určitě chcete ty dvě tabulky propojit cross joinem bez vazební podmínky?
anonymni
Profil *
Kajman:
Za now() sa mi tam priplietol stredník. Chcem len aby zrátalo hodnoty device.linka = 1 a to download a upload a zapísalo do tabuľky inej.
Tori:
Skúsil som pridať ale nefunguje to
Kajman
Profil
anonymni:
Když tedy dáte jen select, bez insertu před ním, tak se vypíší správná čísla?
anonymni
Profil *
Kajman:
Keď dám
SELECT 
    SUM( in_bytes_rate ),
    SUM( out_bytes_rate )
FROM
   system.net_device
WHERE 
    linka = 1
tak zráta výsledok tak ako má.
Kajman
Profil
A s tímto dotazem (bez cross joinu s monitoring.linka) ten insert jde?
anonymni
Profil *
Keď dám:
INSERT INTO monitoring.linka
(
download,
upload,
time
)
vyhodí chybu: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 6
Kajman
Profil
Ale jen insert bez hodnot přeci nepůjde. A time je klíčové slovo - je jistější takový sloupec obalit zpětnými apostrofy.

INSERT INTO monitoring.linka
            (`download`,
             `upload`,
             `time`)
SELECT Sum(in_bytes_rate),
       Sum(out_bytes_rate),
       Now()
FROM   system.net_device
WHERE  linka = 1
anonymni
Profil *
Kajman:
Zrátalo hodnoty nejaké, ale nie ktoré malo. Do tabuľky download aj upload zapísalo rovnaké hodnoty, pritom nie sú rovnaké.
Kajman
Profil
Jaký datový typ máte u sloupců dwonload a upload? Není možné, že se ten součet nevešel do jejich rozsahu?
anonymni
Profil *
Už som to vyriešil. Mal som zlú štruktúru tabuľky ako napísal Kajman.

Mám teraz ďalší problém. Rieším podobný script,

  //Aktualny datum, tvar 20121031
  $datum = Date("Ymd", Time());   
  // Priradenie cisla karty k technikovmu ID
  $id_technika = array(
    '00000002' => '79',
    '00000003' => '102',
    '00000004' => '74',
    '00000005' => '101',
    '00000006' => '84',   
  );              
  // Script na spravenie selectu z databazy do mysql
  $sql_select = mysql_query("INSERT INTO i.servisni_zasahy
(
    i.zavada_userid, 
    UNIX_TIMESTAMP( i.zavada_datum), 
    UNIX_TIMESTAMP( i.zavada_time), 
    i.zavada_technik, 
    i.zavada_txt, 
    UNIX_TIMESTAMP(i.reseni_datum), 
    i.priority, 
    i.complete, 
    i.UNIX_TIMESTAMP(complete_time), 
    i.complete_userid, 
    i.nahlaseno,
    i.servisni_zasahy_typ,
    i.doba, 
    i.ulozil, 
    i.visible
)        
SELECT 
    d.id_doch,
    d.prichod,
    d.odchod,
    d.id_doch,
    d.prichod d.odchod,
    d.odchod,
    d.prichod,
    3,
    1,
    d.prichod,
    $id_technika[1],
    0,
    142,
    |nespecifikovano|,
    $id_technika[1],
    1
FROM
    ispadmin.servisni_zasahy as i,
    dochadzka.vypocitane as d
WHERE 
    d.datum = '$datum' and d.datum like '20%'
    "); 

V selecte je premenna $id_technika[1] (zatiaľ to neviem domyslieť, tak som tam dal túto hodnotu).

Select by mal (podľa všetkého) spraviť select technika - jeho id 000002, a ja potrebujem aby namiesto id 00002 dal do výsledku hodnotu 79.

Ako to docieliť? Viem, že tým array to nepôjde ale akosi ma nič nemôže napadnúť teraz.

Ďakujem
Kajman
Profil
Může použít case, elt a field, poddotaz nebo přímo si vytvořit v databázi tu převodní tabulku.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0