Autor Zpráva
H13
Profil
Ahoj, zajímalo by mě jestli by pomocí jednoho databázového dotazu v MySQL šlo získat následující:

Dejme tomu, že existuje tabulka se sloupci ID, ID_KATEGORIE, JMENO a jsou v ní následující data:


ID   |   ID_KATEGORIE   |   JMENO
1    |   1            | Prvni
2    |   1            | Druhy
3    |   2            | Treti
4    |   3            | Ctvrty
5    |   3            | Paty


Potřeboval bych získat počet položek v jednotlivých kategoriích, tedy výsledek ve tvaru : $radek->ID_KATEGORIE = 1 : 2, $řádek->ID_KATEGORIE = 2: 1, $radek->ID_KATEGORIE = 3 : 2

Pokud bych potřeboval znát výsledek pro jednu kategorii: SELECT count(id) WHERE kategorie = 1;
Je nějaká možnost jak dostat výsledky pro všechny kategorie (bez použití php foreache a dotazu pro každou kategorii)?

Díky za jakoukoliv radu
Alphard
Profil
Jestli to dobře chápu, tak:
select count(*) from tabulka group by ID_KATEGORIE
H13
Profil
Alphard
Ahoj, díky moc, ano v podstatě je to ono, jen jsem přišel na problém, protože navíc potřebuju získat data z jednotlivých položek:


SELECT jmeno, count(*) from tabulka group by id_kategorie :-(



Při tomto:
select count(*) from tabulka group by ID_KATEGORIE

dostanu:
0 => 2
1 => 1
3 => 2

já bych potřeboval
0=> prvni , 2
1=> druhy, 2
2=>treti, 1
4=>ctvrty, 2
5=>paty, 2

:-(

tedy:
SELECT t.jmeno AS jmeno, COUNT(*) AS pocetvkategorii FROM tabulka AS t GROUP BY t.id_kategorie :-(


0=> jmeno: prvni , pocetvkategorii: 2
1=> jmeno: druhy , pocetvkategorii: 2
2=> jmeno: treti , pocetvkategorii: 1
4=> jmeno: ctvrty , pocetvkategorii: 2
5=> jmeno: paty , pocetvkategorii: 2

EDIT: no pomocí složenýho dotazu to jde, takže asi použiju složený dotaz

Každopádně díky
Kajman_
Profil *
select t.*,v.pocet from tabulka t join
(SELECT id_kategorie, count(*) pocet from tabulka group by id_kategorie) v on t.id_kategorie=v.id_kategorie
H13
Profil
Kajman:
Díky moc, já jsem sestavil něco takovýho:

 SELECT t.*, (SELECT count(*) AS pocetvkategorii FROM tabulka AS k 
WHERE t.id_kategorie = k.id_kategorie GROUP BY k.id_kategorie) 
AS pocetvkategorii FROM tabulka AS t 


Což zase nechápu jak může fungovat WHERE při GROUP BY?

Jinak tento dotaz mi funguje:
 select t.*,v.pocet from tabulka t join
(SELECT id_kategorie, count(*) pocet from tabulka group by id_kategorie) v on t.id_kategorie=v.id_kategorie 


takže asi to nemá cenu řešit, protože použiju tebou navržený dotaz, díky moc.

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