Avatar billede tanzaweb Nybegynder
26. maj 2005 - 10:47 Der er 9 kommentarer og
1 løsning

Har en while sætning som fejler

Hej Jeg har følgende sætning som ikke laver en distinct eller stopper ved limit 20, hvad gør jeg galt

$result = mysql_query("SELECT Side_vist FROM Data") or die (mysql_error());
        $rows = mysql_num_rows($result);
        $antal_total = $rows;

echo "<table width='400'>
        <tr>
            <td>Side:</td><td>Antal</td><td>antal i %</td>
        </tr>";

        $result = mysql_query("SELECT DISTINCT Side_vist FROM Data ORDER BY Side_vist LIMIT 20") or die (mysql_error());
        while ($rows = mysql_num_rows($result)){       
        $antal_msie1 = $rows;
        $antal_display_msie1 = 100 * $antal_msie1/$antal_total;
       
echo    "<tr>
            <td width='200'>".$rows['Side_vist']."</td><td width='100'>".$antal_msie1."</td><td>".sprintf(" %.2f",($antal_display_msie1))." %</td>
        </tr>";
        }
Avatar billede bojo Nybegynder
26. maj 2005 - 10:55 #1
ændr til

while( $rows = mysql_fetch_array($resultat) ) {
  $antal = mysql_num_rows($result);
  ...
  ...
  ...
Avatar billede bojo Nybegynder
26. maj 2005 - 10:55 #2
Hov - det var "for dansk"

while( $rows = mysql_fetch_array($result) ) {
  $antal = mysql_num_rows($result);
  ...
  ...
  ...
Avatar billede tanzaweb Nybegynder
26. maj 2005 - 11:53 #3
Okay, jeg kommer så frem til at den viser siderne, men den viser det samme tal ud for where som er sat i LIMIT.

Her har jeg så prøvet at lave en foreach på hver række, som her:
$result = mysql_query("SELECT DISTINCT Side_vist FROM Data ORDER BY Side_vist LIMIT 20") or die (mysql_error());
        while( $rows = mysql_fetch_array($result) ) {
        $antal = mysql_num_rows($result);
            foreach ($antal as $antal_1){
            $antal_msie1 = $antal_1;
            $antal_display_msie1 = 100 * $antal_msie1/$antal_total;
            }
       
echo    "<tr>
            <td width='200'>".$rows['Side_vist']."</td><td width='100'>".$antal_msie1."</td><td>".sprintf(" %.2f",($antal_display_msie1))." %</td>
        </tr>";
        }
men får denne fejl:

Warning: Invalid argument supplied for foreach() in d:\web\statistik\sidevisninger.php on line 24 som er denne linje:
foreach ($antal as $antal_1){

har prøvet flere ting nu, men vil lige spørge til den igen
Avatar billede bojo Nybegynder
26. maj 2005 - 12:04 #4
Du har misforstået noget i mySQL tror jeg.

mysql_num_rows($result) returnere antal rows der er berørt af din handling.

mysql_fetch_array($result) returnere resultatet af dit opslag, altså de rows du ville have.

Du får fejl da $antal ikke er et array og du derfor ikke kan lave "foreach" på den.

Jeg kan ikke lige gennemskue hvad du laver, men forsøg at fjern

  foreach ($antal as $antal_1){
og den tilhørende
}

while( $rows = mysql_fetch_array($result) ) {
        $antal = mysql_num_rows($result);
        $antal_display_msie1 = 100 * $antal/$antal_total;
            }
Avatar billede tanzaweb Nybegynder
26. maj 2005 - 12:19 #5
Ok, Det er fordi, jeg gerne vil have udskrevet det der står i Side_vist, og samtidig have talt antallet af rækker der er med de enkelte sider.

som eks:

Sidenavn: antal gange vist: I%:
forside 25 50%
side 2  10 20%
side 3  15 30 %
Avatar billede tanzaweb Nybegynder
26. maj 2005 - 12:46 #6
hvordan gør jeg så lige det???
Avatar billede bojo Nybegynder
26. maj 2005 - 12:58 #7
Det kommer jo an på - - -
hvor har du $antal_total fra og hvad viser den? (jeg tror jeg kan gætte det, men ...)
er side_vist en tæller for hver enkelt side?
Avatar billede tanzaweb Nybegynder
26. maj 2005 - 13:14 #8
Først ja, det er en tæller for hver enkelt side, når de bliver besøgt bliver deres navn lagt i databasen, og nogle enkelte andre oplysniger bliver også lagt deri.

$hvis du ser på det første indlæg kan du se hvor $antal_total kommer fra. Men det er for at tælle alle rækkerne, og så bruge det til at få procenten af siderne.
Avatar billede bojo Nybegynder
29. maj 2005 - 09:40 #9
Linien $antal_total = $rows; sætter $antal_total til arrayet der indeholder de rækker du har fået ud af di forespørgsel og ikke antallet af resultater, som fås med mysql_num_rows($result); så derfor er min $antal = det du tror du har i $antal_total.

Håber det leder dig på vej
Avatar billede tanzaweb Nybegynder
29. maj 2005 - 09:47 #10
har løst den med følgende:

$result = mysql_query("SELECT Side_vist FROM Data") or die (mysql_error());
        $rows = mysql_num_rows($result);
        $antal_total = $rows;

echo "<table width='400'>
        <tr>
            <td>Side:</td><td>Antal</td><td>antal i %</td>
        </tr>";

        $result = mysql_query("SELECT Side_vist, count(*)as Hits FROM Data GROUP BY Side_vist ORDER BY Hits DESC") or die (mysql_error());
        while( $rows = mysql_fetch_array($result) ) {
        //$antal = mysql_num_rows($result);
            $antal_msie1 = $rows['Hits'];
            $antal_display_msie1 = 100 * $antal_msie1/$antal_total;
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