Mulla on kaksi taulukkoa:
Details:
id | accountid | name | jne
1 | 464354325 | test |
2 | 344565423 | tes2 |
3 | 234643523 | tes3 |
...
Tracker:
id | accountid | time
1 | 344565423 | 10:01 21.2.2011
2 | 344565423 | 10:02 21.2.2011
3 | 234643523 | 11:21 20.2.2011
...
Kyseessä on kävijälaskurin tyyppinen kyhäelmä jossa Tracker taulukkoon tulee jokaisesta käynnistä oma merkintä. Osaako joku neuvoa miten saan listattua viisi eniten esiintyvää accountid:tä(eli eniten samaa accountid:tä tracker taulukossa)?
Ja pikkaisen pidemmälle vietynä, kuinka saan listattua äskeisellä tavalla accountid:t, mutta numeroiden sijasta haluan esittää details taulukosta vastaavan nimen?
Lopuksi kiinnostaisi kuinka saan esitettyä kaksi edellistä, mutta huomioiden vain merkinnät jotka on tehty trackeriin viimeisen 24 tunnin aikana.
Ideoita?
Mutulla voisin arvailla jotain tähän suuntaan:
SELECT COUNT(accountid) as cnt, accountid FROM tracker GROUP BY accountid ORDER BY cnt DESC LIMIT 5
ja toinen ongelma mennee varmaan ihan laittamalla where ehtoon halutun aikavälin, jolloin tulosjoukko rajautuu oikein.
Menisiköhän näin
SELECT COUNT(t.accountid) as n, t.accountid, d.name FROM tracker t JOIN details d ON d.accountid=t.accountid WHERE DATE_SUB(CURDATE(), INTERVAL 24 HOUR) <= t.time GROUP BY t.accountid ORDER BY n DESC LIMIT 5
Tuolla Chiminin ohjeellahan se sujuu ongelmitta, kiitos!
Nythän tietojen tulostus käy tähän tapaan
Mitä jos haluaisin tulostaa vielä namen perään lukumäärän kuinka monta kertaa kyseinen accountid esiintyy taulukossa tuolla aikavälillä?
Ootko kokeillu laittaa siihen vaikka tuota $row["n"]:ää?
Kiitos, sillähän se meneekin.
Tuli muuten vaan mieleen, että jos useampaa accountid:tä on saman verran niin millä perusteella ne sitten järjestyy? Tässä tapauksessa ei väliä, mutta ihan vaan mielenkiinnosta...
ORDER BY:n mukaanhan sen pitäisi ne järjestää, eli riippuu mitä kaikkia määritteitä sinne oot pistäny.
Ja jos järjestystä ei ole määritetty, niin se voi olla ihan mikä tahansa, mikä ei tietenkään tule yllätyksenä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.