Autor Zpráva
TSD
Profil *
Nevím si rady s jedním sql.

Mám tabulku, ve ktereé jsou nějaké události. Ukládám tam čas v UNIX formátu a ukládám ID osoby, která tu událost vyvolala.

Potřeboval bych výpis počtu těch událostí, seskupený po měsících a rozdělený po osobách.

Takže

Měsíc osobaID1 osobaID2 osobaID3
1. 11 41 6
2. 7 4 14

Ty osoby to dost komplikují. Udělal bych to vnořeným cyklem na úrovni php, kde projedu všechny osoby a pro každou z nich vytáhnu počet událostí. To ale nejde, pokud má být výpis v takto organizované tabulce.

Má to vůbec řešení? Teď když jsem to tak přehledně popsal, tak se mi to jeví jako nereálné.
TSD
Profil *
Ještě mě napadlo, že bych mohl nejdřív pomocí DISTINCT vytáhnout všechna ID osob, pak z nich v php sestavit SELECT, kde už budu jen řešit GROUPování podle času.

Ono těch osob nebude nikdy víc než cca 20, jde o zaměstnance firmy, kde jich je stabilně asi 5.
Kajman_
Profil *
Asi bych dal group by na měsíc i člověka. Takový výpis dal v php do pole a to pak zpracoval, aby byl výpis dle přání.
TSD
Profil *
Dvakrát GROUP BY mě taky napadl, ale nenapadlo mě pole, to neumím.
Kdybych do něj měl natahovat položky nějak v cyklu, to by mě ani trochu nebavilo, ale možná to tam můžu hrknout nějak najednou a pak by to byla asi nejefektivnější cesta,

Půjde řádově o tisíce položek.. maximálně. Takže SQL>> pole zkusím pohledat, díky.
Kajman_
Profil *
Jasně že najednou. Dostanete řádky např.
mesic, osoba, pocet
a uložíte to do $pole[mesic][osoba]=pocet a při tom rovnou generovat pole sloupečků $osoby[osoby]=1

Pak stačí dvakrát foreach a máte tabulku.
TSD
Profil *
už to mám. Díky, pane.
TSD
Profil *
Vážení, já opravdu nevím jak na to, mohl by mi prosím někdo pomoct? Myslím že jsem tomu věnoval dost úsilí, ale prostě nevím jak.

Mám tabulku veOrders, kde jsou sloupce vlozeno (čas v unix formátu) a osoba.
V druhé tabulce veUsers mám osoby, ale v tomto případě mě zajímá sloupec ID a pobocka, kde je dvoumístný textový kód. Ten je vždy pro více osob společný, ano, vím že to není úplně korektní, ale to neřeším.

Potřebuju vypsat po dnech počet objednávek, které připadají na jednotlivé pobočky.

došel jsem k tomuto:
SELECT COUNT(*) as pocet, MIN(vlozeno) as xdatum, osoba
FROM veOrders WHERE status > 0
GROUP BY (truncate(vlozeno/86400,0))
ORDER BY vlozeno DESC


Tím získám počet objednávek po dnech. To ID osoby už je samozřejmě chybně.
Je mně jasný, že potřebuju dvakrát GROUP, ale nevím jak to seskládat.

ještě poznámka - ten status tam musí být, to jen tak bokem.
Kajman_
Profil *
SELECT COUNT(*) as pocet, MIN(vlozeno) as xdatum, pobocka, group_concat(osoba) osoby
FROM veOrders WHERE status > 0
GROUP BY (truncate(vlozeno/86400,0)), pobocka
ORDER BY vlozeno DESC
TSD
Profil *
trochu jsem se do toho zahrabal, zapomněl jsem poděkovat. Takže děkuju :)
Toto téma je uzamčeno. Odpověď nelze zaslat.