while und foreach Schachteln

mkoeni1

Erfahrenes Mitglied
Hallo Leute,

ich habe mir ein eigenes Script zur Bewertung von Webseiten erstellt.
Jetzt bei der Auswertung bin ich auf ein Problem gestossen.

Ich habe folgenden Code:
PHP:
// SQL fetch row fragedb and fragid
                                while($row=mysql_fetch_array($resultfrag)) {
                                    $id=$row["frageid"];
                                    $fragedb=$row["fragedb"];
                                    echo "<tr>";
                                        echo "<td><b>Kapitel:</b></td>";
                                        echo "<td colspan=\"5\" align=\"center\">$fragedb</td>";
                                        echo "</tr><tr><td><b>Bewertung:</b></td>";
                                        echo "<td align=\"center\" colspan=\"5\">'.$bewertung.'</td>";
                                        // Abstand dazwischen
                                        echo "</tr><tr><td colspan=\"6\"><img src='images/1pixt.gif' width='1' height='10' alt='' border='0'></td></tr>";
                                }

und dieses Stück:
PHP:
foreach($ergebnis as $frageid => $bewertung)
                        {
                            switch($bewertung){
                            case 0:
                                echo '<img src="images/sgut.gif" width="15" height="15" alt="ausr" border="0">';
                            break;
                            case 1:
                                echo '<img src="images/gut.gif" width="15" height="15" alt="ausr" border="0">';
                            break;
                            case 2:
                                echo '<img src="images/befr.gif" width="15" height="15" alt="ausr" border="0">';
                            break;
                            case 3:
                                echo '<img src="images/ausr.gif" width="15" height="15" alt="ausr" border="0">';
                            break;
                            case 4:
                                echo '<img src="images/mangl.gif" width="15" height="15" alt="ausr" border="0">';
                            break;
                            }
                              echo 'Die Frage mit der ID: '.$frageid.' wurde mit '.$bewertung.' bewertet<br>';
                              mysql_query('INSERT INTO ergebnistabelle (frageid, bewertung) VALUES('.$frageid.', '.$bewertung.')');
                        }


Jetzt meine Frage. Wie kann ich die beiden Kontrollstrukturen zusammenfügen, um in dieser Zeile
PHP:
echo "<td align=\"center\" colspan=\"5\">'.$bewertung.'</td>";

die Variable $bewertung ausgeben über die Spalte in der Datenbank.


Wer weiß hier eine Lösung oder eine Alternative ?


Vielen Dank
Matze
 
Danke ich habs selber gelöst ;-)

Jetzt habe ich noch ein anderes Problem:
Ich versuche es mal zu beschreiben. In meiner Datenbank werden die Fragen gespeichert.
dazu gibt es 5 Antwortmöglichkeiten. 1-5 wie in der Schule ;-)

Die Fragen werden für jeden Bewerter sichtbar. Der erste bewertet Frage 1 mit 2, der zweite bewertet frage 1 mit 4, der dritte bewertet frage 1 mit 5, oder so ähnlich.

Jetzt will ich am Ende in einer Übersicht zeigen, wie oft zB. zu Frage 1 - die 1 aufgrufen worden ist, zu Frage 1 die 2 aufgerufen ist, usw.

Das ganze möchte ich als Zahl darstellen. -> zB. 12 oder 9

1 2 3 4 5 (Kategorie)
Wie gefällt Ihnen die Seite ? 4 3 4 7 12 (Anzahl an Stimmen jeweils)
Wie gefällt Ihnen die Farbgebung ? 1 5 2 2 0 (!) (Anzahl an Stimmen jeweils)
usw.


wie kann ich die einzelnen Werte aus der Datenbank holen und hochzählen und wie oben auflisetn

Folgenden Code habe ich bereits:
PHP:
<?php

echo "<table align='center' border='1' cellpadding='3' cellspacing='0' class='table_border'>";
echo "<tr>";
echo "<td align='center' valign='top' class=\"box3\"><img src='images/1pixt.gif' width='15' height='15' alt='' border='0'>Kapitel</td>";
echo "<td align='center' valign='top' class=\"box1\"><img src='images/sgut.gif' width='15' height='15' alt='sehr gut' border='0'></td>";
echo "<td align='center' valign='top' class=\"box1\"><img src='images/gut.gif' width='15' height='15' alt='gut' border='0'></td>";
echo "<td align='center' valign='top' class=\"box1\"><img src='images/befr.gif' width='15' height='15' alt='befr' border='0'></td>";
echo "<td align='center' valign='top' class=\"box1\"><img src='images/ausr.gif' width='15' height='15' alt='ausr' border='0'></td>";
echo "<td align='center' valign='top' class=\"box1\"><img src='images/mangl.gif' width='15' height='15' alt='mangl' border='0'></td>";
echo "</tr>";


include ("db_frag.php");
$resultfrag = mysql_query("SELECT * FROM $dbtable");

// SQL fetch row fragedb
while($row = mysql_fetch_array($resultfrag)) {
    $frageansich = $row["fragedb"];

echo "<tr>";
echo "<td align='center' valign='top'><img src='images/1pixt.gif' width='20' height='1' alt='' border='0'><b>$frageansich</b></td>";
echo "<td align='center' valign='top'><img src='images/1pixt.gif' width='20' height='1' alt='' border='0'>5</td>";
echo "<td align='center' valign='top'><img src='images/1pixt.gif' width='20' height='1' alt='' border='0'>6</td>";
echo "<td align='center' valign='top'><img src='images/1pixt.gif' width='20' height='1' alt='' border='0'>2</td>";
echo "<td align='center' valign='top'><img src='images/1pixt.gif' width='20' height='1' alt='' border='0'>3</td>";
echo "<td align='center' valign='top'><img src='images/1pixt.gif' width='20' height='1' alt='' border='0'>5</td>";
echo "</tr>";



} // while
echo "</table>" 
?>


wie man sieht, gebe ich bis jetzt nur die Kategorien der Fragen aus. Die Datenbank in der die Ergebnisse vorliegen existiert noch nicht.
Ich dachte mir in die Tabelle "ergebnisse" werden die Werte von anfang an gespeichert und der Wert dann immer hochgezählt.

Fazit: Ich denke es gibt 2 Möglichkeiten. Entweder man zählt den jeweiligen Eintrag in der Datenbank hoch, oder man hat zig Eintrage und addiert diese per Script. Ich denke Variante 1 ist leichter.


Hat jmd. Erfahrung mir diesem Problem ?

Vielen Dank und viele Grüße
Matze
 
Bin mir jetzt nicht sicher, ob das so geht (habs nicht getestet):
SQL:
SELECT SUM(`bewertung`) as punkte, COUNT(`bewertung`) as anzahl GROUP BY `frage`
 
Ja Hallo, danke das funktioniert so weit. Ich habe jetzt folgenden Code eingebaut:
PHP:
// Anzahl Ausgeben
$sql = "SELECT COUNT(*) as Anzahl FROM ergebnistabelle";
$result = mysql_query($sql) OR die(mysql_error());
$row = mysql_fetch_assoc($result);

    echo "So stehts: ".$row['Anzahl']."<br />";
Dieses Script zählt jetzt alle Einträge in der Spalte "bewertung" in der tabelle "ergebnistabelle" zusammen.

So sieht meine Tabelle "ergebnistabelle" aus. Dort wird im Augenblick nur gespeichert mit welcher bewertung zB. Frage x beantwortet wurde. Und das wird bei jeder Bewertung überschrieben.
Code:
CREATE TABLE ergebnistabelle (
 frageid int(25) NOT NULL auto_increment,
 bewertung varchar(255) NOT NULL,
 PRIMARY KEY  (frageid)
);
Ich hab so das Gefühl, dass ich meine Tabelle "ergebnistabelle" noch erweitern muss, damit auch unterschiedliche Benutzer berücksichtigt werden. Im Moment werden die Einträge immer überschrieben. So kann ich ja nichts zusammenzählen, oder ?

Meine Tabelle "users" sieht so aus:
Code:
CREATE TABLE users (
 userid int(25) NOT NULL auto_increment,
 email varchar(255) NOT NULL,
 username varchar(25) NOT NULL,
 password varchar(255) NOT NULL,
 wasbew varchar(255) NOT NULL,
 PRIMARY KEY  (userID),
 UNIQUE KEY username (username)
) COMMENT='SA Members';
Ich möchte für jeden Bewerter zählen, wie einer zB. Frage 1 bewertet hat um dann am Schluss sagen zu können.
Frage 1: wurde so oft mit 1 bewertet
Frage 1: wurde so oft mit 2 bewertet
Frage 1: wurde so oft mit 3 bewertet
Frage 1: wurde so oft mit 4 bewertet
Frage 1: wurde so oft mit 5 bewertet
.
.
.
Frage n: wurde so oft mit 1 bewertet
Frage n: wurde so oft mit 2 bewertet
Frage n: wurde so oft mit 3 bewertet
Frage n: wurde so oft mit 4 bewertet
Frage n: wurde so oft mit 5 bewertet

von allen Usern zusammen.


Jetzt meine Frage: Wie kann ich die beiden Tabellen verbinden, damit ich zu "JEDEM" user sagen kann wie er was bewertet hat ?
Und wie könnte der PHP-Code aussehen, mit dem ich das grafisch visualisieren kann ?

Veilleciht hat jmd. einen Tipp ;-)

Vielen Dank dafür
Matze
 
SQL:
SELECT v.*, u.* FROM ergebnistabelle as v, users as u WHERE v.userid = u.userid GROUP BY v.userid

Diese Abfrage sollte dir die zum User gehörigen Bewertungen ausgeben.
Die Bewertungstabelle muss noch die Spalte "userid" erhalten.


Dein Script gibt übigends die Anzahl der Einträge in der Tabelle aus, also wie viele dran teilgenommen haben. Nicht aber, wie welche Frage beantwortet wurde (Gesamtergebniss)
 
Zuletzt bearbeitet:
Zurück