Sečtení hodnot v Mysql

Vývojová prostředí, aplikace, skripty, http://www... síťové programy, internet, sdílení...
Odpovědět
Hansz
Nováček
Nováček
Registrován: 10. kvě 2006

Sečtení hodnot v Mysql

Příspěvek 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.
OndraSter
Středně pokročilý
Středně pokročilý
Uživatelský avatar
Registrován: 22. úno 2006
Bydliště: Praha / ČVUT FIT
Kontaktovat uživatele:

Příspěvek 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..
PC: i5-2500k 4.5GHz/24GB RAM/GTX560 Ti 1GB/>5TB - W7 Prof x64; Microsoft SideWinder X3 notebook: HP 6715b (4GB RAM) - W7 Prof x64;
mobil: Nokia Lumia 800 Cyan, 16GB; tablet: Toshiba Portege M200 (2GB, 64GB SSD, GeForce FX5200) - W7 Prof x32


Nahraďte Arduino výkonnější variantou!
Vývojová prostředí a nástroje | Webové prohlížeče | Seznam freehostingů
Hansz
Nováček
Nováček
Registrován: 10. kvě 2006

Příspěvek 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 :x
OndraSter
Středně pokročilý
Středně pokročilý
Uživatelský avatar
Registrován: 22. úno 2006
Bydliště: Praha / ČVUT FIT
Kontaktovat uživatele:

Příspěvek od OndraSter »

tak do toho bash skriptu dej i

/usr/bin/php -f /root/soucet.php

:)
PC: i5-2500k 4.5GHz/24GB RAM/GTX560 Ti 1GB/>5TB - W7 Prof x64; Microsoft SideWinder X3 notebook: HP 6715b (4GB RAM) - W7 Prof x64;
mobil: Nokia Lumia 800 Cyan, 16GB; tablet: Toshiba Portege M200 (2GB, 64GB SSD, GeForce FX5200) - W7 Prof x32


Nahraďte Arduino výkonnější variantou!
Vývojová prostředí a nástroje | Webové prohlížeče | Seznam freehostingů
Hansz
Nováček
Nováček
Registrován: 10. kvě 2006

Příspěvek 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.
Kriss
Začátečník
Začátečník
Uživatelský avatar
Registrován: 12. úno 2007
Kontaktovat uživatele:

Příspěvek 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 :)
CPU: Intel Core2Duo E6300 1,86GHz@3,2GHz MB: Asus P5B Deluxe/WiFi-AP RAM: Geil 2048MB DDR II 800MHz Kit @914MHz GPU: ATI Radeon X1950PRO Ultimate
http://share.csko.net/files/KT-PC/

Posledni vytvor: http://hledej-aukce.cz
Odpovědět

Zpět na „Programování a web“