Avatar billede bigtime Nybegynder
22. januar 2012 - 19:43 Der er 16 kommentarer og
1 løsning

er ved at lave en counder men ??

jeg syntes ikke den regner det helt rigtig ud.
her er  kode stykket

$syv_dage_tilbage = "". date('Y')."-".date('m')."-".(date('d')-7)."";
                    $sql5 = mysql_query("select * from info0 where sideID='$sideID' AND dato>'$syv_dage_tilbage'")or die(mysql_error());
                    $numrowfs = mysql_num_rows($sql5);
                    $look = mysql_fetch_array($sql5);
                   
                    $antal = '0';
                    $besog = '0';
                    $gnmsnit = '0';
                   
                    $besog = $besog + $look['antal'];
                    $antal = $antal + '1';
                   
                    if($besog <> '0') {
                        $sql = mysql_query("Select dato from sider where id='$sideID'")or die(mysql_error());
                        $lodate = mysql_fetch_array($sql);
                        $start_date = $dato;

           
                        if($numrowfs <= 7){
                            $gnmsnit = ($besog / 7);
                        }else{
                            $gnmsnit = $besog / ($forskel + '1');
                        }
                   
                   
                    $sql4 = mysql_query("update sider set totalhits='".(($totalhits)+1)."',hits='".(($hits)+1)."' ,dagshits='$gnmsnit' where id='$sideID'")or die(mysql_error());
                    }

der bliver lavet en rekke for hver dag hvor den har alle sidebesøgende og der skulle den gerne tage alle sammen fra de sidste 7 dag det er den der hedder antal og finde gennemsnittet af besøgende og sætte i dagshits.

kan det forstås ellers skal jeg prøve at skære den mere ud ?
Avatar billede rix Novice
22. januar 2012 - 20:03 #1
Synes at din kode er forvirene og den udnytter ikke de functioner som findes i sql og php
Jeg kan godt komme med en bedre forslag men for det skal jeg have dette at vide

$dato er det tiden vi har nu eller?
if($besog <> '0') { dette mener du vel at den ikke skal være 0
Avatar billede bigtime Nybegynder
22. januar 2012 - 20:18 #2
ups det havde jeg lige glemt $dato bliver ikke brugt :D
og if($besog <> '0')  yep det har du helt ret i :D
Avatar billede rix Novice
22. januar 2012 - 20:48 #3

$syv_dage_tilbage = "". date('Y')."-".date('m')."-".(date('d')-7)."";
                    $sql5 = mysql_query("select * from info0 where sideID='$sideID' AND dato>'$syv_dage_tilbage'")or die(mysql_error());
                    $numrowfs = mysql_num_rows($sql5);
                    $look = mysql_fetch_array($sql5);
                 
                    $antal = '0';
                    $besog = '0';
                    $gnmsnit = '0';
                 
                    $besog = $besog + $look['antal'];
                    $antal = $antal + '1';
                 
                    if($besog != '0') {
                        $sql = mysql_query("Select dato from sider where id='$sideID'")or die(mysql_error());
                        $lodate = mysql_fetch_array($sql);
                       

         
                        if($numrowfs <= 7){
                            $gnmsnit = ($besog / 7);
                        }else{
                            $gnmsnit = $besog / ($forskel + '1');
                        }
                 
                 
                    $sql4 = mysql_query("update sider set totalhits='".(($totalhits)+1)."',hits='".(($hits)+1)."' ,dagshits='$gnmsnit' where id='$sideID'")or die(mysql_error());
                    }

hmm er ikke helt sikker på om dette virker. men prøv og sig om det har ændret noget
Avatar billede bigtime Nybegynder
22. januar 2012 - 21:33 #4
ved ikke helt om det er rigtig men skal if($numrowfs <= 7){ ikke være if($numrowfs >= 7){
og får at den skal regne et dagsgennemsnit ud skal den så ikke tage antal fra alle 7 dage og divider med 7 får at få et dagsgennemsnit ?

og så ville jeg enlig gerne have den til kun at sætte et disemal ind efter kommaet men hvordan ?
Avatar billede rix Novice
22. januar 2012 - 21:51 #5
ahh matamatik er ikke min stærke side. men mener at hvis man skal have gemen sint af en tække tal skal man ligge dem alle sammen og dividere med antal
< så er det mindre end og > så er det støre
http://phpartikler.dk/artikler/begynder2.php <= der er det beskrevet
Avatar billede danco Nybegynder
23. januar 2012 - 02:17 #6
http://www.tutorialspoint.com/mysql/mysql-avg-function.htm

I min verden er det mest naturligt at gøre brug af MySQLs indbyggede funktion til at udregne gennemsnit. Det vil så også sige at det hele mere eller mindre kan løses gennem ét databasekald.
Avatar billede DeeDawg Nybegynder
23. januar 2012 - 04:28 #7
Først og fremmest, så er det tal man regner med og ikke strenge, så derfor bør det angives således:

<?php
    $x = 0;
?>

Det andet tillades fordi PHP er alt for tilgivende, men det giver ingen mening. Du behøver heller ikke lave flere kald til date(), bare fordi du skal have tegn ind imellem. Desuden vil det nok ikke altid give det rigtige resultat, da du sætter år og måned til altid at være det nuværende. Derfor bør du gøre det på denne måde:

<?php
    $syv_dage_tilbage = date("Y-m-d", strtotime("-7 days"));
?>

Derudover er du nødt til at lave et loop, for at komme igennem alle resultater fra en SQL-query.

<?php
    while($look = mysql_fetch_assoc($sql5)){
        $besog = $besog + $look['antal'];
    }
?>


Hvordan bruger du din tabel kaldet info0? Umiddelbart ville jeg tro, at du har 1 linje per dato, men dette fortæller os noget andet:

if($numrowfs <= 7){
    $gnmsnit = ($besog / 7);
}else{
    $gnmsnit = $besog / ($forskel + '1');
}
Avatar billede bigtime Nybegynder
23. januar 2012 - 16:54 #8
danco du har nok redt i det du skriver men jeg har en ide her som jeg gerne ville kunne se om jeg kan programmere da jeg ikke er den bedste programmør men kan vel lære det en dag.

DeeDawg sådan ser info0 ud
-----------------------------------------------------
id|sideID|dato|antal|time24|time23|time22|time21 osv.
-----------------------------------------------------
det med den loop der den skal jo ikke tage alle den skal bare tage 7 dage og det skulle jo gerne være 7 strenge.
Avatar billede danco Nybegynder
23. januar 2012 - 17:23 #9
I min verden er det også vigtigt at en programmør forstår at løse udfordringen på bedst muligvis.
Og nu vil jeg så lige sige, den der tabel struktur. Den holder slet ikke.
Du har behov for en tabel der indeholder et timestamp og et sideID og evt en IP som sammensat nøgle. Derudfra trækker du information om hvor mange hits der har været i de givne tidsrum.
Avatar billede bigtime Nybegynder
23. januar 2012 - 17:31 #10
danco
Tanken har strejfet mig om det var bedre at lave det sådan for det andet vil da sløve siden når der er så mange udtræk i dben har jeg ret ?
info0 har 90 rækker

ud over det så det med at løse det på bedst mulige måde så havde jeg heller ikke selv lavet det på den måde men det er et projekt jeg har overtaget for en som ikke gad siden mere han sagde det rev hans server helt i knæ, så nu vil jeg bare have det til at køre som han havde det så jeg vidste det virkede og så ville jeg begynde og lave ændringerne, oprindeligt er det skrevet i asp
Avatar billede bigtime Nybegynder
23. januar 2012 - 18:32 #11
okay http://dk.php.net/ er nede så der ikke lige noget hjælp der men
kan jeg bruge den her til at kun få en decimal bag kommaet
$gnmsnit = round(gnmsnit,1);
$gnmsnit = replace(gnmsnit,",",".");
Avatar billede bigtime Nybegynder
23. januar 2012 - 21:04 #12
okay hvordan laver jeg så den tager alle tallende i antal og lægger dem sammen for de sidste 7 dage og lægger dem ind i den her $look['antal']

                    $syv_dage_tilbage = date("Y-m-d", strtotime("-7 days"));
                    $sql5 = mysql_query("select * from info0 where sideID='$sideID' AND dato>'$syv_dage_tilbage'")or die(mysql_error());
                    $numrowfs = mysql_num_rows($sql5);
                    $look = mysql_fetch_array($sql5);
               
                    $antal = '0';
                    $besog = '0';
                    $gnmsnit = '0';
               
                    $besog = $besog + $look['antal'];
                    $antal = $antal + '1';
Avatar billede DeeDawg Nybegynder
24. januar 2012 - 09:47 #13
Kan godt være jeg ikke er helt opdateret, men er pænt sikker på at der ikke eksisterer en funktion kaldet replace(). Uanset hvad, så giver det ingen mening at dele den opgave op i 2 dele, når du har en funktion der kan gøre begge for dig.

<?php
    // 1,234.6
    $x = number_format(1234.5678, 1);
   
    // 1.234,6
    $y = number_format(1234.5678, 1, ",", ".");
?>


"det med den loop der den skal jo ikke tage alle den skal bare tage 7 dage og det skulle jo gerne være 7 strenge."

- tror du har misforstået noget. Der skal ikke ændres på din SQL query, men for at hente alle resultater fra den query, er du nødt til at lave et loop. Hvis ikke du gør det, så vil $look['antal'] kun indeholde antallet fra 1 linje/række. Med loopet kan vi få allesammen med. :)

<?php
    while($look = mysql_fetch_assoc($sql5)){
        $besog = $besog + $look['antal'];
    }
?>

Vil altså gemme antallet af besøg fra de seneste 7 dage, i variablen $besog.
Avatar billede bigtime Nybegynder
24. januar 2012 - 23:20 #14
DeeDawg
super mange tak så har jeg fået det til at virke, kom med et svar

ud over det kan man så ikke det her $strDag = date("w", $starDag);
$starDag er en dato fra dben og jeg skal bruge hvilken dag det er om det er 1 2 3 4 5 6 eller 7
Avatar billede DeeDawg Nybegynder
25. januar 2012 - 06:16 #15
Hvis $starDag indeholder et timestamp, kan du godt. Men hvis det er gemt i din database som fx 2012-01-25, så er du nødt til at omdanne den dato til et timestamp først.

<?php
    // 0 - 6
    $strDag = date("w", strtotime($starDag));
   
    // 1 - 7
    $strDag = date("N", strtotime($starDag));
?>
Avatar billede bigtime Nybegynder
25. januar 2012 - 14:42 #16
cool tak :D
Avatar billede DeeDawg Nybegynder
26. januar 2012 - 07:36 #17
Har du overvejet at få lukket spørgsmålet så? :)
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