01. januar 2006 - 08:08Der er
14 kommentarer og 1 løsning
Tælle hvor mange unikke rows der findes i tabel
Jeg har en stor tabel med visits på mine brugere, jeg vil nu tælle hvor mange unikke besøg jeg har haft. Det er imidlertid et stort problem for mig at finde ud af eftersom jeg ikke er så erfaren i mysql (Har pt. kun brugt simple queries som select, insert, delete osv.). Jeg har fundet ud af at jeg kan finde gengangere med: "select ip, count(ip) from visits group by ip having count(ip) > 1"
Min database ser således ud: id ip hostname time 1 10.10.0.1 tux.lan NOW() 2 10.10.0.1 tux.lan NOW() 3 10.10.0.2 beastie.lan NOW()
Den skal finde unikke ip'er, og tælle duplicates med men kun en gang, så min database burde returnere 2. Har i et forslag til dette?
Manuelle og semi-automatiske strategier for identitetsstyring virker - lige indtil nogen beder om dokumentation. For at undgå denne fare har DKTV taget kontrol over sin identitets- og adgangsstrategi.
Den skal også tælle folk med som har været der flere gange, men den skal kun tælle det en gang. Pt. er der to forskellige ip'er i databasen nemlig 10.10.0.1 & 10.10.0.138, men de er der begge flere gange.
Jeg har lige endnu et spørgsmål (Hvis du har lyst til at svare). Hvis jeg nu har en masse af de visits logget. Hvordan kan jeg så opdele dem igen? Hvis jeg nu vil tælle hvor mange forskellige dage der er i databasen (I denne form fx. 2006-01-01) kan den så outputte et array som: Array ( [2006-01-01] => 2 [2006-01-02] => 2 [2006-01-03] => 1 }
Den outputter, altså kun for en bestemt dato, kan man få den til at printe ud for alle datoerne pt. er det vist kun for en? Array ( [time] => 2006-01-01 [count(*)] => 8 )
$db=&new MySQLConnector('localhost','kawsper','k1chx09g','arto_stats'); // Find ud af hvor mange der har besøgt (Tæller også multi-besøg fra samme ip) aka Hits //if($ip != "10.10.0.138") { $db->performQuery("insert into visits (id, ip, hostname, pageload, referer, time) values ('NULL', '$ip', '$hostname', '$page_loaded', 'none', NOW())"); //}
$sql="SELECT id FROM visits"; $db->performQuery($sql); $hits = $db->getNumRows();
$sql="select ip, count(ip) from visits group by ip having count(ip) > 1"; $db->performQuery($sql); $gengangere = $db->getNumRows();
$sql="select count(distinct ip) from visits"; $db->performQuery($sql); $unique = $db->fetchRow();
$sql="select `time`,count(*) from visits group by `time`"; $db->performQuery($sql); $stat = $db->fetchRow(); print_r($stat);
Du skal have en while-sætning omkring $stat = $db->fetchRow(); for at få alle rækker. Eller også kan man gøre noget smart med mysqlconnector.class.php - jeg bruger den ikke selv.
Det er sikkert nemt nok - hvis man lige kender mysqlconnector.class.php ;) Du kan enten vente på nogen, der ved noget om den, eller svare selv, acceptere eget svar.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.