Avatar billede elskermad.dk Nybegynder
23. august 2003 - 19:18 Der er 29 kommentarer og
1 løsning

Forskellige værdier i samme del af et array

Hej Eksperter :)
Jeg har forsøgt mig at prøve med lidt arrays men jeg synes det er hulens svært ;/

Jeg har i en database nogen værdier over hvor mine brugere kommer fra og vil gerne kunne se det lidt mere grafisk derfor vil jeg tælle op hvormange der er kommet fra en specifik side, dette går fint nok, men mit problem kommer når jeg vil have sorteret arrayet efter hvilken der har den største "antal" værdi...

lidt svært at forklare, men indtil videre ser mit script således ud:

    $foresp = mysql_query("SELECT * FROM kalender_stat_ref ORDER BY ref DESC") or die(mysql_error());
    while($row = mysql_fetch_array($foresp)) {
    $ref_ip = $row["ip"];
    $ref_ref = $row["ref"];
   
    $ref_ref = explode("/", $ref_ref);

    $alle[] = $ref_ref[2];
   
    }

    $antalsite = count($alle);
   
    $site = 0;
    $aktiv = "";
   
    while ($antalsite > $site) {
        if ($aktiv != $alle[$site]) {
            if ($aktiv != "") {
               
                echo"
                $alle[$site] ($antal)<br>
                ";
               
            $antal = 1;
            }
        }
        else {
            $antal = $antal+1;
        }
       
        $aktiv = $alle[$site];
        $site = $site+1;
    }

Nu vil jeg gerne have den som har det højeste antal til at være øverst, og dette ved jeg ikke hvordan jeg skal lave :(

Håber der er nogen der kan hjælpe mig med mit problem
Avatar billede detox Nybegynder
23. august 2003 - 19:57 #1
Avatar billede detox Nybegynder
23. august 2003 - 20:04 #2
Avatar billede elskermad.dk Nybegynder
23. august 2003 - 20:09 #3
ehmn ja, men problemmet er jo at jeg både skal have navnet på siden og hvormange gange den forekommer med inden at jeg sortere igen
Avatar billede detox Nybegynder
23. august 2003 - 20:15 #4
Jeg er ikke helt med, men måske kan du bruge arsort(). Den beholder key->val relationen.
Avatar billede elskermad.dk Nybegynder
23. august 2003 - 21:02 #5
jamen det er ikke det med at sortere, men hvordan jeg får 2 værdier med i samme del af arrayet... altså både navnet på siden og hvormange gange den er fremkommet, også skal det sorteres efter antallet
Avatar billede schaefner Juniormester
23. august 2003 - 21:06 #6
Mon ikke det kan klares direkte i sql-kaldet. Hvordan ser din data ud i tabellen?
Avatar billede schaefner Juniormester
23. august 2003 - 21:12 #7
<?php
$foresp = mysql_query("SELECT *, COUNT(ref) AS antal FROM forum_body GROUP BY ref ORDER BY antal DESC") or die(mysql_error());
while ($row = mysql_fetch_assoc($foresp)) {
    echo "$row[ref] ($row[antal])<br>";
}
?>
Avatar billede schaefner Juniormester
23. august 2003 - 21:14 #8
Prøv det simple eksempel og se om det er noget i den retning du ønsker :)
Avatar billede tipsen Nybegynder
23. august 2003 - 21:17 #9
Er det spørgsmål om at du vil lære at bruge arrays eller skal løse den opgave med at vise besøgende på en grafisk måde?
Avatar billede elskermad.dk Nybegynder
23. august 2003 - 21:23 #10
okay prøver lige at forklare det engang til

jeg har en database tabel hvor jeg pytter data ind om mine brugere når de går ind på min side første gang...
i tabellen bliver IP og ref plus tidspunkt gemt!

udfra ref vil jeg gerne lave en statestik over hvilke sider der sender flest besøgende til mig...

en side skal kun skrives 1 gang selvom der måske er 27 der er kommet fra den side, og det samme med andre sider!
det er kun selve domænenavnet jeg er interesseret i, så derfor har jeg fjernet diverse mapper osv...

dette kan jeg godt finde ud af til dels (hvert fald kun at vise et domæne en gang selvom den måske optræder flere gange) mit problem opstår når jeg skal have den til at vise hvormange gange den givende domæne findes i databasen, og at jeg gerne vil have den der har sendt flest besøgende til mig, til at være øverst, også den mest næstflest viderestillingere til at være anden øverst osv hele vejen ned!

Hvordan laver jeg det? For jeg skal jo både tælle hvormange gange domænet er der imens den udskriver rækkerne men bagefter skal de også sorteres efter hvormange gange!

Håber I forstår det lidt bedre nu?
Avatar billede elskermad.dk Nybegynder
23. august 2003 - 21:25 #11
tipsen: begge dele, men jah... ku godt bruge lidt grund træning i hvordan arrays bliver sat og hvordan man kan sortere i dem

(det var nok forkert at skrive "grafisk" da jeg bare mener at jeg vil udskrive det mere overskuelig end en masse rækker i en database)
Avatar billede elskermad.dk Nybegynder
23. august 2003 - 21:26 #12
det jeg selv har lavet indtil videre kan ses på denne side:
http://myserver.lir.dk/kontorchef.dk/admin/stat.php allernederst, men tallet passer ikke, men det med at et domæne kun bliver vist en gang fungere!
Avatar billede elskermad.dk Nybegynder
23. august 2003 - 21:27 #13
Avatar billede schaefner Juniormester
23. august 2003 - 21:28 #14
det ville jo være nemmere at skippe undermapper og lignende før du gemte i databasen. Det ville også fylde mindre :)
Avatar billede schaefner Juniormester
23. august 2003 - 21:29 #15
men prøver lige at lave noget
Avatar billede elskermad.dk Nybegynder
23. august 2003 - 21:29 #16
nej, for jeg vil godt kunne se det præsist hvis jeg skal se hvor det helt præsist er folk linker til mine sider henne
Avatar billede schaefner Juniormester
23. august 2003 - 21:36 #17
Prøv:

$foresp = mysql_query("SELECT SUBSTRING_INDEX(ref,'/',3) AS shortref, COUNT(shortref) AS antal FROM kalender_stat_ref GROUP BY ref ORDER BY antal DESC") or die(mysql_error());
while ($row = mysql_fetch_assoc($foresp)) {
    echo "$row[shortref] ($row[antal])<br>";
}
Avatar billede elskermad.dk Nybegynder
23. august 2003 - 21:41 #18
jeg har ikke en kolonne i min tabel som hedder antal schaefner, det skal scriptet selv tælle i mens den går gennem rækkerne, det er det der gør at jeg ikke selv kan finde ud af det!

tabellen indeholder kun: id, ref, ip, tidspunk
Avatar billede schaefner Juniormester
23. august 2003 - 21:42 #19
Hvis du bare gad at prøve, så skal du bare se :)
Jeg har dog lige lavet en rettelse:

<?php
$foresp = mysql_query("SELECT SUBSTRING_INDEX(ref,'/',3) AS shortref, COUNT(*) AS antal FROM kalender_stat_ref GROUP BY shortref ORDER BY antal DESC") or die(mysql_error());
while ($row = mysql_fetch_assoc($foresp)) {
    echo "$row[shortref] ($row[antal])<br>";
}
?>
Avatar billede elskermad.dk Nybegynder
23. august 2003 - 21:45 #20
jeg havde prøvet det, men den udskrev en masse rækker
Avatar billede elskermad.dk Nybegynder
23. august 2003 - 21:47 #21
den virker :D dejligt!

kan du forklare mig hvordan den virker?

og er det muligt at slå http://.. og http://www... sammen således at de forskellige sider ikke bliver delt i 2?
Avatar billede schaefner Juniormester
23. august 2003 - 21:49 #22
Hvordan mener du?
Avatar billede elskermad.dk Nybegynder
23. august 2003 - 21:52 #23
hvis du ser på siden jeg har det (http://80.197.72.220/kontorchef.dk/admin/stat.php nederst) kan du se at fx http://www.elskermad.dk og http://elskermad.dk er 2 forskellige, det ville jo være dejligt hvis det ligesom gik ind under en

og kan du forklare hvordan den mysql sætning virker?
Avatar billede elskermad.dk Nybegynder
23. august 2003 - 21:54 #24
tror selv jeg har fundet en løsning på mit problem, inden jeg gemmer adressen i min tabel fjerne jeg evt. www.
Avatar billede schaefner Juniormester
23. august 2003 - 21:54 #25
Prøver lige
Avatar billede schaefner Juniormester
23. august 2003 - 21:57 #26
ok, så du har det løst eller hvad?
Avatar billede elskermad.dk Nybegynder
23. august 2003 - 22:00 #27
yep det går jeg ud fra, men vil stadigvæk gerne have at vide hvordan din sætning virker .)
Avatar billede schaefner Juniormester
23. august 2003 - 22:03 #28
tjaah, jeg stinker til at forklare noget som helst, så du kan få forklaringen fra mysql.com: http://www.mysql.com/doc/en/String_functions.html

SUBSTRING_INDEX(str,delim,count)

Returns the substring from string str before count occurrences of the delimiter delim. If count is positive, everything to the left of the final delimiter (counting from the left) is returned. If count is negative, everything to the right of the final delimiter (counting from the right) is returned:

mysql> SELECT SUBSTRING_INDEX('www.mysql.com','.', 2);
        -> 'www.mysql'
mysql> SELECT SUBSTRING_INDEX('www.mysql.com','.', -2);
        -> 'mysql.com'

mvh. Jesper Sørensen
Avatar billede tipsen Nybegynder
23. august 2003 - 22:03 #29
Det er ikke altid at folks problemer helt matcher det de spørger om, men det er jo rart når de alligevel bliver løst :-)
Avatar billede elskermad.dk Nybegynder
23. august 2003 - 22:06 #30
yep, tænk at jeg havde været lige så comp-dum som resten af familien hvis eksperten ikke havde været til ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester