Stránka 1 z 1
Sečtení hodnot v Mysql
Napsal: stř 2. led 2008, 11:08
od Hansz
Zdarec,mám takový problém.V mysql vytvořenou tabulku napr.Tab1 a v ní sloupce
jmeno a pocet např:
jmeno pocet id
AAA 152 1
BBB 100 2
CCC 50 3
AAA 100 4
DDD 400 5
AAA 10 6
CCC 5 7
a potřeboval bych nějak sečíst hodnoty 'pocet' pokud maji stejné 'jmeno'
a ulozit je do jednoho radku pod stejnym jmenem a zbytek vymazat.
vysledek
jmeno pocet id
AAA 262 1
BBB 100 2
CCC 55 3
DDD 400 4
mohli by jste mi prosím poradit jak to udělat.Díky moc.
Napsal: stř 2. led 2008, 12:49
od OndraSter
Predpokladam ze k dispozici mas i PHP. Ja bych to udelal nejak takto:
Kód: Vybrat vše
$result = mysql_query('SELECT * FROM tab1');
$vars = array();
while($line = mysql_fetch_array($result)) {
if(!$vars[$line['jmeno']]) $vars[$line['jmeno']] = $line['pocet'];
else $vars[$line['jmeno']] += $line['pocet'];
}
mysql_query('TRUNCATE TABLE tab1');
foreach ($vars as $name=>$number) {
mysql_query('INSERT INTO tab1 (jmeno, pocet) VALUES (\'' . $name . '\', ' . $number . ')');
}
nezkousel jsem, mozna se tam nekde vyskytuje chyba..
Napsal: stř 2. led 2008, 13:04
od Hansz
No to je problém,já to chci jako součást scriptu (bash) a v tom chci spustit mysql a načíst soubor který se vykoná,takže (jestli to dobře chápu)tak by to mělo být jen z příkazů mysql

Napsal: stř 2. led 2008, 13:30
od OndraSter
tak do toho bash skriptu dej i
/usr/bin/php -f /root/soucet.php

Napsal: stř 2. led 2008, 14:05
od Hansz
Tak nakonec jsem to dal dohromady(stacilo poobedvat)
#soucet tech co se vyskytuji vic jak 1 a ulozeni do souboru test_1.txt
select jmeno,sum(pocet) from tab1
group by jmeno having count(*) >=2
into outfile '/home/test_1.txt';
#zapis tech co se vyskytuji jen 1 a ulozeni do souboru test_2.txt
select jmeno,pocet from tab1
group by jmeno having count(*) =1
into outfile '/home/test_2.txt';
+vymazani tab1 a znovu nacteni ze souboru
Mozna krkolomny reseni s tim ukladanim ale s sql si hraji 3 dny tak me potesilo ze jsem na to prisel i sam.Pokud by nekomu vadila rychlost tak to mi nevadi jedna se o malou databazi.
Dik za rady.
Napsal: pon 14. led 2008, 18:05
od Kriss
I prez zdanlivou jedoduchost problemu sem nakonec nad timhle problemem stravil trochu vic casu nez sem chtel, ale vymislel sem ti reseni na 3 radky mysql
Kód: Vybrat vše
CREATE TEMPORARY TABLE docasna_tabulka SELECT jmeno, sum(pocet) FROM tab1 GROUP BY jmeno;
TRUNCATE TABLE tab1;
INSERT INTO tab1 SELECT *, NULL FROM docasna_tabulka;
Prvni radek ti vytvori docasnou tabulku kde budou uz vypocitany soucty, druhej radek ti vyprazdni puvodni tabulku a treti radek data z docasny tabulky prekopiruje do puvodni, ted uz prazdny tabulky.
Docasna tabulka se po ukonceni relace sama smaze, takze ji nemusis mazat prikazem.
Edit: btw tohle reseni zabere serveru priblizne setinu doby kterou zabere to reseni s tim ukladanim do souboru
