Autor | Zpráva | ||
---|---|---|---|
ng9 Profil |
#1 · Zasláno: 11. 4. 2012, 13:28:37 · Upravil/a: Moderátor (editace znemožněna) 11. 4. 2012, 15:16:02
Zdravím,
žádám vás o radu, už si s tím hraju nějakou hodinu a nejsem schopen vytvořit funkční řešení. Mám tabulku se strukturou: id kdo kde typ co kdy odkud del 22521 xxx.xxx.xxx.xxx 420910 4 komentar 1334032176 0 0 22654 xxx.xxx.xxx.xxx 420910 0 komentar2 1334097795 0 1 22655 xxx.xxx.xxx.xxx 420910 4 komentar3 1334119235 0 0 22656 xxx.xxx.xxx.xxx 420910 4 komentar4 1334119265 0 0 .... kdo = ip adresa kde = navázání na id v druhé tabulce typ = typ komentare co = text komentare del = 0 = viditelný, 1 = smazaný a potřeboval bych složit dotaz tak, aby mi vyhodil výsledky takové, že ze všech záznamů vybere řádky, které mají konkrétní hodnotu sloupku "kde" s rozdílnou ip adresou a "groupnuté" dále podle sloupku "typ" s tím, že vrátí počet řádků s počtem právě tech "typů" z různých ip adres. Zní to relativně jednoduše, ale nejsem schopen to sesmolit .... nejblíže jsem vytvořil tento dotaz: SELECT t.typ FROM tabulka t WHERE t.kdy>".(time()-60*60*24*60)." AND t.kde={$aktualni->id} AND t.del=0 GROUP BY t.kdo to mi vrátí pěkně "typ" každé rozdílné ip, otázka je, jak dále tento výsledek smrsknout podle daného typu a zanést počet řádků onoho smkrnutí? Aby výsledkem byl řádek s unikátními typy a jejich počtem na rozdílných ip adresách. Podotýkám, že potřebuji vrátit počty typů na rozdílných ip, ne tedy počet na všech ip. Mockrát děkuji jestli mi poradíte jak tento problém vyřešit. Zkoušel jsem různé variace group by, distinct ale nikdy jsem nedošel ke zdárnému výsledku. |
||
Tori Profil |
Seskupovat se dá i podle více sloupců:
GROUP BY t.kdo, t.typ . Počet řádků (v jednotlivých skupinách) se zjistí SELECT COUNT(*) . Z toho byste to už měl dát dohromady.
|
||
ng9 Profil |
#3 · Zasláno: 11. 4. 2012, 14:57:43
Tori:
Díky za reakci, bohužel GROUP BY t.kdo, t.typ jsem již předtím zkoušel, ale výsledek nebyl správný a když jsem tam zakomponoval i COUNT(c.typ) do SELECTu tak mi to vrátilo právěže počet všech typů na všech ip adresách (ne rozdílných), jakoby to ukázalo počet ještě před seskupením GROUP BY a já právě potřebuji až poté ... |
||
Kajman Profil |
ng9:
Moc jsem ten slovní popis nepobral. Co kontrétně by mělo být výsledkem hledaného dotazu? Počet jedinečných kombinací (`kdo`,`typ`) pro záznamy jednoho konkrétního `kde`? Tedy podle příkladu jenom číslo 2? |
||
ng9 Profil |
Kajman:
Ano, jestli se dobře chápeme tak jsi to napsal správně. Jak napsala Tori, když použiji GROUP BY kdo, typ tak se zdá, že je to výsledek, který potřebuji, ale ve chvíli kdy použiji COUNT(typ) abych zjistil počty tak mi to vrátí celý počet nalezených shod a ne počet jedinečných shod až po odfiltrování různých ip adresech klauzulí GROUP BY ... doufám, že se vyjadřuji správně :). nastíním situaci: id kdo kde typ co kdy odkud del 22521 1.2.3.4 420910 4 komentar 1334032176 0 0 22654 1.2.3.4 420910 0 komentar2 1334097795 0 1 22655 2.2.2.2 420910 4 komentar3 1334119235 0 0 22656 2.2.2.2 420910 4 komentar4 1334119265 0 0 výsledkem by mělo být, že se groupnou ip a dostanu něco jako 22521 1.2.3.4 420910 4 komentar 1334032176 0 0 22655 2.2.2.2 420910 4 komentar3 1334119235 0 0 a teď se groupne typ a vypočítá počet po předchozím groupu [typ] = 4 [count(typ)] = 2 takto by to mělo fungovat ... |
||
Kajman Profil |
Pokud se má vracet jedno číslo, tak žádné group by není třeba. Jen spočítáte jedinečné kombinace vybraných řádků.
SELECT COUNT(DISTINCT `kdo`, `typ`) pocet FROM tabulka t WHERE t.kde = 420910 AND t.del = 0 |
||
ng9 Profil |
#7 · Zasláno: 11. 4. 2012, 16:40:39 · Upravil/a: ng9
Kajman:
Těch typů je samozřejmě více a může být i více výsledků ... ale takto zapsaný DISTINCT jsem nezkoušel. Zkusím a dám vědět jestli to pasuje. Kajman: Super Kajmane, zdá se, že to funguje jak má. Díky moc. |
||
Časová prodleva: 14 let
|
0