Autor | Zpráva | ||
---|---|---|---|
TSD Profil * |
#1 · Zasláno: 31. 3. 2008, 05:03:05
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 * |
#2 · Zasláno: 31. 3. 2008, 07:56:26
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 * |
#3 · Zasláno: 31. 3. 2008, 09:45:04
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 * |
#4 · Zasláno: 31. 3. 2008, 10:08:30
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 * |
#5 · Zasláno: 31. 3. 2008, 12:50:24
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 * |
#6 · Zasláno: 31. 3. 2008, 17:11:49
už to mám. Díky, pane.
|
||
Časová prodleva: 4 dny
|
|||
TSD Profil * |
#7 · Zasláno: 4. 4. 2008, 05:30:48
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 * |
#8 · Zasláno: 4. 4. 2008, 09:30:18
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 |
||
Časová prodleva: 3 dny
|
|||
TSD Profil * |
#9 · Zasláno: 7. 4. 2008, 08:27:12
trochu jsem se do toho zahrabal, zapomněl jsem poděkovat. Takže děkuju :)
|
||
Časová prodleva: 16 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0