Stránka 1 z 1

Počítání v MySQL

Napsal: sob 6. lis 2004, 14:35
od sovicka
Zdarec, mám tu takovej skriptík, kterej mi plive počet nalezených výsledků v MySQL... zatím mi dává pouze počet řádků, ale já bych potřeboval spočítat všechny hodnoty v jednom sloupci podle zvolených podmínek...

někde jsem slyšel něco o nějaké funkci SUM nebo taknějak ... ale nevím jak to použít....

DÍKY MOC

Příklad co je tam teď:

Kód: Vybrat vše

//spodní část tabulky se součty
$vysledek = MySQL_Query("SELECT * FROM tricka WHERE typ = Tričko'"); 
$vysledek2 = MySQL_Query("SELECT * FROM tricka WHERE typ = 'Tričko' AND barva = 'Černá'"); 
$vysledek3 = MySQL_Query("SELECT * FROM tricka WHERE typ = 'Tričko' AND barva = 'Modrá'");
// ..... a potom si to vyvolám:
MySQL_Num_Rows($vysledekXX)
A příklad co bych potřeboval:

Kód: Vybrat vše

$vysledek = MySQL_Query("SELECT FROM tricka !!SPOCITEJ HODNOTY SLOUPCE (kusu) VSUDE,KDE:!!  WHERE typ = Tričko'"); 
$vysledek2 = MySQL_Query("SELECT * FROM tricka !!SPOCITEJ!! WHERE typ = 'Tričko' AND barva = 'Černá'"); 
$vysledek3 = MySQL_Query("SELECT * FROM tricka !!SPOCITEJ!! WHERE typ = 'Tričko' AND barva = 'Modrá'");
// ... a teď nějaký příkaz, který mi dá celkový počet kusů od každé barvy v nějakých proměnných
???

Napsal: sob 6. lis 2004, 15:38
od miho
Pokud jsi tim spocitat myslel secist tak se skutecne pouzije SUM

Kód: Vybrat vše

select sum(sloupec) from tabulka where podminka
pokud chces scitane hodnoty seskupit(agregovat) dle nejakeho sloupce tak pouzij group by

Kód: Vybrat vše

select sum(sloupec),seznam_sloupcu_dle_kterych_se_seskupuje from tabulka where podminka group by seznam_sloupcu_dle_kterych_se_seskupuje
dle tveho popisu treba

Kód: Vybrat vše

select sum(kusu),typ from tabulka group by typ
vrati celkovy pocet kusu pro kazdy typ zbozi.

Pokud potrebujes jen skupiny, ktere splnujou nejake kriterium tak pouzijes navic having napr.

Kód: Vybrat vše

select sum(kusu),typ from tabulka group by typ having sum(kusu)>100
vrati celkovy pocet kusu pro kazdy typ zbozi jehoz celkovy pocet kusu je vetsi nez 100.

Pokud potrebujes zjistit pocet radku tak je tvuj pristup z prvniho prikladu extremne neefektivni. Spravne je

Kód: Vybrat vše

select count(*) from tricka where ...

Napsal: sob 6. lis 2004, 15:46
od sovicka
Ještě poslední dotázek:
jakým příkazem to dostanu ven...???
něco jako MySQL_Fetch_Result ????

Napsal: sob 6. lis 2004, 19:30
od pavel.minarik
sovicka2001 píše:Ještě poslední dotázek:
jakým příkazem to dostanu ven...???
něco jako MySQL_Fetch_Result ????
normálně to můžeš přiřadit do proměnné podobně jako každý jiný select, když uděláš SELECT SUM(Sloupec) FROM ... tak dostaneš normálně zase relaci (tabulku) o jednom řádku a jednom sloupci

Napsal: ned 7. lis 2004, 14:36
od sovicka
jj, už jsem na to přišel sám... jen to takový lehce přeplácaný, ale funguje to!

DÍKY MOC :wink:

Napsal: úte 9. lis 2004, 11:58
od tosuja
Ciste informacne, na www.mysql.com je online manual (proklikas se tam pres Developer zone, Documentation). Tam se dozvis i to, cos nikdy vedet nechtel....

Napsal: čtv 15. lis 2007, 20:35
od SpeedyGT
Sorry, že to házím sem, ale jde taky o počítání v mysql, ale jen řádky... ať dělám, co dělám, stále mi to nefunguje....

Mám dotaz

Kód: Vybrat vše

SELECT COUNT (*) AS pocet FROM clanky WHERE kategorie = 'recenze'
který mi na administraci ic.cz v sql dotazech vyplivne normálně číslo všech recenzí....

Pokavaď to ale zkusím rovnou z webu, tak nic...
Zkoušel sem i nějak takhle

Kód: Vybrat vše

$pole = mysql_query("SELECT COUNT (*) AS pocet FROM clanky WHERE kategorie = 'recenze'");
$data = (mysql_fetch_array($pole));
echo $data['pocet'];
a pořád nic... připojením k db by to být nemělo, ostatní dotazy normálně fungují.... Neví někdo preco mi to nefunguje? :?

// mysql_error(); hlásí

Kód: Vybrat vše

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 '*) AS pocet FROM clanky WHERE kategorie = 'recenze'' at line 1
//Vyřešeno, mezi COUNT a (*) nesmí být mezera :oops:

Napsal: pát 16. lis 2007, 19:08
od Lamicz
zkus delat COUNT nad indexem, IMHO to pole musi byt ciselny:

Kód: Vybrat vše

SELECT COUNT(`Id`) AS `pocet` FROM ...