Kleines Problem mit der Ausgabe eines Statistikbalkens

Despoiler

Erfahrenes Mitglied
Grüßt euch!
Ich erstelle gerade eine kleine Statistik für meine private Seite.
Die Ausgabe der einzelnen Clicks, Votes, Comments zu meinen Bildern funktioniert einwandfrei. Woran es scheitert ist die Ausgabe über einen Statistikbalken.Wie muss ich es anstellen, dass der erste Balken (gibt z.B. das Bild mit den meisten Kommentaren aus) maximal (zu 100% über die gesamte Zellenbreite) angezeigt wird?
Momentan ist die Summe aller 5 Balken 100%.

Schaut euch bitte das Bild an, dann wird es klarer.


PHP:
#Top 5  
$query = "SELECT images.ID, images.Name, images.Cat, Count(comments.ComID) AS CountComID
	      FROM images, comments
	      WHERE images.ID = comments.ID
	      GROUP BY images.ID, images.Name
	      ORDER BY CountComID DESC LIMIT 0, 5";
$result = mysql_query($query, $link);

#Summe der Kommentare ermitteln
$resultsum = mysql_query($query, $link);
while ($sum = mysql_fetch_array($resultsum)) {
	$sumcom += $sum['CountComID'];
}

#Ausgabe der Tabelle
echo "<table class=\"main_border\" width=\"335\" cellpadding=\"2\" cellspacing=\"1\" border=\"0\">
		<tr>
			<td class=\"table_a\" colspan=\"5\"><b>Top Kommentare</b></td>
		</tr>";
			$x = 0;
			while ($row = mysql_fetch_array($result)) {
				$pixel = round(((180 * ($row['CountComID'] / $sumcom)) - 12), 0);
				$x++;
echo "<tr>
				<td class=\"table_d\" width=\"15\" align=\"center\">$x</td>
				<td class=\"table_d\" width=\"90\"><a href=\"clicks.php?action=imgclicks&cat=" . $row["Cat"] . "&id=" . $row["ID"] . "\">" . $row["Name"] . "</td>
				<td class=\"table_d\" width=\"180\"><img src=\"./images/vote_left.gif\" width=\"3\" height=\"10\" border=\"0\"><img src=\"./images/vote_middle.gif\" width=\"" . $pixel . "\" height=\"10\" border=\"0\"><img src=\"./images/vote_right.gif\" width=\"3\" height=\"10\" border=\"0\"></td>
				<td class=\"table_d\" width=\"25\" align=\"center\">" . $row['CountComID'] . "</td>
				<td class=\"table_d\" width=\"25\" align=\"center\">" . round((($row['CountComID'] / $sumcom) * 100), 0) . "%</td>
		</tr>";
			}
echo "</table>";

Momentan mach ich es so:
Die Zelle ist 180px breit.
Davon sieh ich das Anfangs- und Endbild des Balkens ab. 6px kommen noch von einem "margin" und das macht dann zusammen 12.

PHP:
$pixel = round(((180 * ($row['CountComID'] / $sumcom)) - 12), 0);

Vielen Dank
 

Anhänge

  • stats.jpg
    stats.jpg
    112,5 KB · Aufrufe: 50
Hier das Prinzip, wie du das (mathematisch gesehen) machen musst:

Satz ist die Zahl in Prozent.
PX 1 ist die Breite in Pixel wenn die Breite 100px beträgt, nach deinem jetzigen Verfahren berechnet.
PX 2 ist die Breite in Pixel, wenn die Breite 180px beträgt und der erste Wert komplett voll sein soll.
Code:
        Satz PX 1 PX 2
Wert 1: 33%  33px 180px
Wert 2: 20%  20px 109px
Wert 3: 17%  17px 93px
Wert 4: 15%  15px 82px
Wert 5: 12%  12px 65px
Wert 6: 3%   3px  16px
Berechnung:
(Absolute Breite / Wert 1%) * Wert X%
Als Beispiel:
(180px / 33) * 20 = 5,45 * 20 = 109px

Das ganze jetzt noch in PHP unwandeln und mit jeden Wert dynamisch berechnen und dein Ergebnis sieht aus wie du es willst (sofern ich die Fragestellung richtig verstanden habe ;) )
 
Zuletzt bearbeitet:
Ok mal schauen ob ich dich richtig verstanden habe.

Hier die berechneten px-Werte für meine Kommentare (siehe Bild oben):

Code:
Wert 1: (180px*1/6) * 6 --> 180px
Wert 2: (180px / 6) * 4 --> 120px 
Wert 3: (180px / 6) * 4 --> 120px
Wert 4: (180px / 6) * 3 --> 90px
Wert 5: (180px / 6) * 3 --> 90px

Soweit so gut. Jetzt ermittle ich einfach den maximalen Wert (in diesem Fall die Zahl 6) und speichere diesen ab. Dann durch die while-Schleife und fuktionieren müsste es?! ;-]
 
Also ich hab jetzt mal deine Formel umgesetzt und eingebaut. Schaut gut aus, oder was meinste?
Ich dank dir! ;)


PHP:
#Top 5  
$query = "SELECT images.ID, images.Name, images.Cat, Count(comments.ComID) AS CountComID
					FROM images, comments
					WHERE images.ID = comments.ID
					GROUP BY images.ID, images.Name
					ORDER BY CountComID DESC LIMIT 0, 5";
$result = mysql_query($query, $link);

#Ermitteln des maximalen Wertes
$max = mysql_query($query, $link);
$max = mysql_result($max, 0, 3);

#Summe der Kommentare ermitteln
$resultsum = mysql_query($query, $link);
while ($sum = mysql_fetch_array($resultsum)) {
	$sumcom += $sum['CountComID'];
}

#Ausgabe der Tabelle
echo "<table class=\"main_border\" width=\"335\" cellpadding=\"2\" cellspacing=\"1\" border=\"0\">
		<tr>
			<td class=\"table_a\" colspan=\"5\"><b>Top Kommentare</b></td>
		</tr>";
			$x = 0;
			
			while ($row = mysql_fetch_array($result)) {
				#$pixel = round(((180 * ($row['CountComID'] / $sumcom)) - 12), 0);
				$pixel = round(((180 / $max) * $row['CountComID'] - 12), 0);
				$x++;
echo "<tr>
				<td class=\"table_d\" width=\"15\" align=\"center\">$x</td>
				<td class=\"table_d\" width=\"90\"><a href=\"clicks.php?action=imgclicks&cat=" . $row["Cat"] . "&id=" . $row["ID"] . "\">" . $row["Name"] . "</td>
				<td class=\"table_d\" width=\"180\"><img src=\"./images/vote_left.gif\" width=\"3\" height=\"10\" border=\"0\"><img src=\"./images/vote_middle.gif\" width=\"" . $pixel . "\" height=\"10\" border=\"0\"><img src=\"./images/vote_right.gif\" width=\"3\" height=\"10\" border=\"0\"></td>
				<td class=\"table_d\" width=\"25\" align=\"center\">" . $row['CountComID'] . "</td>
				<td class=\"table_d\" width=\"25\" align=\"center\">" . round((($row['CountComID'] / $sumcom) * 100), 0) . "%</td>
		</tr>";
			}
echo "</table>";
 

Anhänge

  • stats.jpg
    stats.jpg
    88,1 KB · Aufrufe: 33
Zurück