Autor | Zpráva | ||
---|---|---|---|
H13 Profil |
#1 · Zasláno: 19. 10. 2009, 22:55:39 · Upravil/a: H13
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 |
#2 · Zasláno: 19. 10. 2009, 23:12:54
Jestli to dobře chápu, tak:
select count(*) from tabulka group by ID_KATEGORIE |
||
H13 Profil |
#3 · Zasláno: 20. 10. 2009, 00:02:16 · Upravil/a: H13
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 * |
#4 · Zasláno: 20. 10. 2009, 10:50:40
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 |
#5 · Zasláno: 20. 10. 2009, 19:53:57 · Upravil/a: H13
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. |
||
Časová prodleva: 15 let
|
0