Topliste nach Prozenten sortieren

kirka

Mitglied
Hallo Leute, ich habe hier kleines Problem, wie kann ich mit meinem Code die Bilder nach Prozenten sortieren ? bei mir werden jetzt die Bilder nach Stimmen sortiert, und ich möchte, dass anstatt der Stimmen der Wert in Prozenten angezeigt und sortiert wird, hier ist mein Code, muss ich das alles in ein Array reinschreiben und dann die ganze Bilder über Array sortieren und ausgeben oder wie soll ich das jetzt machen ?


danke für eure Tipps und eure Hilfen.

PHP:
<?php


        $session = $_SESSION['login_id'];
    $cat = mysql_real_escape_string($_GET['cat']);


    $q = mysql_query("SELECT id, name, user_id, cat, stimmen FROM bilder WHERE cat = '$cat' AND stimmen > 1 ORDER BY stimmen DESC  LIMIT 10 ") or die (mysql_error());
    $num = mysql_num_rows($q);   
    if ($num == 0) echo "<div class=\"info\">{$lang['pa_no_entrys']}</div>";
    else {
    
    $count = 0;
    $i = 1;
    
    $q2 = mysql_query("SELECT user_id, function_id FROM premium_functionen WHERE user_id = '$session' AND function_id = '1' ");
    $num_row = mysql_num_rows($q2);
    
       echo "<table style=\"padding-left: 23px;\" cellspacing=\"0\" cellpadding=\"0\" width=\"650\" ><tr>";
       
       while($row = mysql_fetch_array($q)) {
       
              $q3 = mysql_query("SELECT id, username FROM users WHERE id = '{$row['user_id']}' ");
              $row3 = mysql_fetch_array($q3);
       
              $count++;

              $q4 = mysql_query("SELECT id FROM bilder_voting WHERE user_pic = '{$row['name']}' OR gegen_pic = '{$row['name']}'") or die (mysql_error());
              $row4 = mysql_num_rows($q4);

              $prozent_wert = $row['stimmen'] * 100 / $row4;
              $prozente = sprintf("%.2f", $prozent_wert);
       
       
            if ($num_row == 0 || IsLogin() == false) {

            $pic = '<img src="uploads/'.$row['name'].'.jpg" border="0" class="userpic"/>';

        } else {

            $pic = '<a href="/index.php?do=profile&user='.$row3['username'].'&secur='.$secur.'" target="_blank">
            <img src="uploads/'.$row['name'].'.jpg" border="0" class="userpic" width="300" height="400"/></a>';

        }
        
        echo "<td><div align=\"center\"><b> ".$i++.". ".$lang['pa_platz']."</b> ".$prozente." %</div>

        $pic

        </td>
        ";
         
         
         if ($count == 2){

            echo "</tr><td><br /></td><tr>";
            $count = 0;

        }
       
       } // end of while
       
        
        echo "</tr></table>";
    }

 ?>
 
Die Stimmen in Prozent umzurechnen wird nicht mal so das Problem sein, man müsste nur wissen was bei dir für 100% steht.
 
ich nehme als 100 % die Stimmen die für und gegen das Foto sind also die anzahl wie oft das Foto angezeigt wurde.


PHP:
$q4 = mysql_query("SELECT id FROM bilder_voting WHERE user_pic = '{$row['name']}' OR gegen_pic = '{$row['name']}'") or die (mysql_error());
              $row4 = mysql_num_rows($q4);

hier gucke ich wie oft das Foto in user_pic und gegen_pic vorkommt und das nehme ich dann als 100 %

aber bei mir geht die Topliste bis Platz 10 , und wenn ich nach Stimmen sortiere dann wird bei mir z.B. auf Platz 2 mehr % als auf Platz 1 angezeigt, und ich muss das alles irgendwie nach Prozenten sortieren damit es dann richtig angezeigt wird.

hier noch ein Screen.


1298756499-clip-10kb.png


auf dem Screen kan man sehen das auf Platz 2 mehr % sind als auf Platzt 1.
 
Zuletzt bearbeitet:
Auf dem Bild kann man aber nicht erkennen wie du das rechnest.

Wenn ich dich richtig verstanden habe müsste es doch so gehen:

SQL:
# positiv = die Anzahl der positiven Bewertungen
# angezeigt = die Anzahl wie oft das Bild insgesamt angezeigt wurde

SELECT * FROM bilder ORDER BY (positiv / angezeigt)
 
Hallo

Du solltest zusätzlich deine abfragen q, q3 und q4 in eine zusammenfassen. Ein query ist extrem zeitaufwendig und du führst 2 einzelne queries bis zu 10 mal aus. dh du hast im worst case 21 abfragen.

Wenn du alles in einem mal abfragst braucht die DB für die Abfrage zwar (warscheilicht geringfügig) länger aber du sparst dir sehr viel Zeit.
Stichworte: inner join, left join, subselect
 
Zurück