+ Antworten
Ergebnis 1 bis 4 von 4

Thema: Verschiedene MySQL Tabellen in eine HTML Tabelle

  1. #1
    TP-Specialist the0bone ist ein richtiges Arbeitstier - DANKE the0bone ist ein richtiges Arbeitstier - DANKE the0bone ist ein richtiges Arbeitstier - DANKE the0bone ist ein richtiges Arbeitstier - DANKE Avatar von the0bone
    Registriert seit
    Mar 2001
    Ort
    NDS
    Beiträge
    4.269

    Verschiedene MySQL Tabellen in eine HTML Tabelle

    Hi,
    ich stehe mal wieder vor einem Problem mit MySQL und PHP :-D

    Ich habe verschiedene Tabellen in MySQL.

    So ist da eine Tabelle die alle Fragen beinhaltet.
    Code:
      `qu_id` int(10) NOT NULL auto_increment,
      `qu_text` varchar(255) NOT NULL,
      PRIMARY KEY  (`qu_id`)
    und eine Tabelle mit allen Antworten. Die jeweils einen Zeitstempel haben.
    Es ist aber auch möglich, dass eine Frage nicht beantwortet wurde.
    Code:
      `answer_id` int(10) NOT NULL auto_increment,
      `qu_id` int(10) NOT NULL,
      `answer_date` date NOT NULL,
      `answer` text NOT NULL,
      PRIMARY KEY  (`answer_id`)
    Nun möchte ich eine HTML Tabelle bekommen... und da hängts.
    Die Tabelle soll so aussehen:
    Name:  Unbenannt-1.jpg
Hits: 24
Größe:  18,8 KB

    Also links in der Spalte sollen alle Fragen aus der Fragentabelle stehen. Egal ob eine Antwort da ist oder nicht.
    Dann nach Datum sortiert die jeweiligen Antworten...

    Und da hängt es bei mir.
    Hätte über nen JOIN auch schon alle Daten in einem grossen Array in PHP. Aber auch dort komm ich nicht weiter, wie das ganze aufgebaut werden sollte.

    Danke
    the0bone

    Wissen ist Macht, nichts Wissen macht nichts! Doch auch auch wenn man es nicht besser weiss, sollte man beim Erstellen einer Webseite auf Frames und Tabellen verzichten.

  2. #2
    TP-Moderator Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Cybergreek lebt für das TP und seine User Avatar von Cybergreek
    Registriert seit
    Nov 2005
    Ort
    Köln
    Beiträge
    1.608
    Mal ein erster Ansatz (Du willst ja nur ne Idee )

    Abfrage in der Form:
    PHP-Code:
    select f.fragea.antwort from frage f left join antwort a on f.id a.frage_id 
    Anzeige in php:
    PHP-Code:
    echo "<table>";
    $aktuelleFrage "";
    $ersteZeile true;
    while (
    $row mysql_fetch_array($result)) {
     
    //wenn letzter Datensatz nicht die gleiche Frage hat wie dieser hier, Frage anzeigen
     
    if ($aktuelleFrage != $row["frage"]) {
      
    //Zeile beenden, wenn davor schon Zeile angefangen
      
    if (!$ersteZeile) {
       echo 
    "</tr>";
      }
      else {
       
    //bei der ersten Zeile muss keine Zeile geschlossen werden, nur gemerkt werden, dass jetzt keine erste Zeile merke kommt
       
    $ersteZeile false;
      }
      
    //neue Zeile anfangen und Frage ausgeben
      
    echo "<tr><td>".$row["frage"]."</td>";
     }
     
    //Antwort ausgeben
     
    echo "<td>".$row["antwort"]."</td>";
     
    //Frage für nächsten Durchlauf merken
     
    $aktuelleFrage $row["frage"];
    }
    echo 
    "</table>"
    Geändert von Cybergreek (02.10.2009 um 22:01 Uhr) Grund: Du wolltest ja auch die NULLer ;)
    Grüße vom Griechen,
    Cybergreek!

    everygain Translator - eine Firefox-Erweiterung, damit der Grieche Euch besser versteht

  3. #3
    TP-Specialist Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Stuck Mojo ist ein richtiges Arbeitstier - DANKE Avatar von Stuck Mojo
    Registriert seit
    Feb 2001
    Ort
    Helmstedt/Wolfsburg
    Beiträge
    4.108
    Da die Spalten sich aus den Inhalten der SQL-Tabelle ergeben kommst Du nicht um 2 Queries herum, wenn Du das Resultset exakt so bekommen möchtest, wie in deiner Tabelle dargestellt.

    Ansonsten einen simplen Query und die Ergebnismenge in einem Array "strukturieren".

    Ich probier mal Variante 1 ausm Kopf:
    PHP-Code:
    $res mysql_query("SELECT DISTINCT answer_date FROM answers ORDER BY answer_date");
    $dates = array();
    while (
    $row mysql_fetch_assoc($res)) {
        
    $dates[] = $row['answer_date'];
    }

    $query 'SELECT q.qu_text';
    $joins = array();
    foreach (
    $dates AS $dateId => $date) {
        
    $dateTableName 'd'.$dateId;
        
    $query .= ', '.$dateTableName.'.answer';
        
    $joins[] = 'LEFT JOIN answers AS '.$dateTableName.' ON '.$dateTableName.'.qu_id = q.qu_id';
    }

    $query .= ' FROM questions AS q '.join(' '$joins);

    $res mysql_query($query);

    echo 
    '<table>'// + Heading
    while ($row mysql_fetch_assoc($res)) {
        echo 
    '<tr>';
        echo 
    '<td>' join('</td><td>'$row) . '</td>';
        echo 
    '</tr>';
    }
    echo 
    '</table>'
    hierbei fällt mir allerdings auf, dass zu jeder Frage nur eine Antwort pro Tag existieren darf! Probier mal

    Gruß
    Jan

  4. #4
    TP-Specialist the0bone ist ein richtiges Arbeitstier - DANKE the0bone ist ein richtiges Arbeitstier - DANKE the0bone ist ein richtiges Arbeitstier - DANKE the0bone ist ein richtiges Arbeitstier - DANKE Avatar von the0bone
    Registriert seit
    Mar 2001
    Ort
    NDS
    Beiträge
    4.269

    Thumbs up

    Zitat Zitat von Cybergreek Beitrag anzeigen
    Mal ein erster Ansatz (Du willst ja nur ne Idee )
    Perfekt!
    Hab es etwas umgebaut und noch eine dritte Tabelle hinzugenommen und aus dem while und row Kram ein foreach gemacht, dass mein vorher erstelltes Array durchläuft.

    Aber es geht! :-)
    Und bei 180 Fragen und aktuell nur 2 Antwortbögen mit einer Scriptzeit von 0.046 Sekunden.

    Kann euch leider keine Live Version zeigen, da die gestellten Fragen schon die Fragen meines Kunden sind. Und die Fragen sind quasi sein Unterscheidungsmerkmal zu anderen Mitanbietern... aber irgendwann werde ich davon eine Kopie machen und etwas mehr zeigen.

    PS: Hier kleiner Codeauszug, da es ja noch komplexer ist.

    PHP-Code:
    $sql_answersheets "
            SELECT *
            FROM `antwortboegen`
            LEFT JOIN `antworten` ON `antworten`.`ab_id` = `antwortboegen`.`ab_id`
            RIGHT JOIN `fragen` ON `fragen`.`frage_id` = `antwort`.`frage_id`
            ORDER BY `fragen`.`fragen_id` , `antwort`.`ab_id`
            "
    ;
            
    $query_answersheets mysql_query($sql_answersheets);
            while (
    $row mysql_fetch_array($query_answersheets)) {
                if (
    $row['ab_finished'] == 1) {
                    
    // hab mich entschiedenen doch nur abgeschlossene antwortbögen aufzunehmen (wo alle Fragen beantwortet sind
                    // und ich schiebe das ganze erst in ein Array
                    
    $master_array[] = $row;
                }
            }
            
            echo 
    "<table>";
            
    $aktuelleFrage "";
            
    $ersteZeile true;
            
            foreach (
    $master_array as $key => $value) {
                
    //wenn letzter Datensatz nicht die gleiche Frage hat wie dieser hier, Frage anzeigen
                
    if ($aktuelleFrage != $value["frage_id"]) {
                    
    //Zeile beenden, wenn davor schon Zeile angefangen
                    
    if (!$ersteZeile) {
                        echo 
    "</tr>";
                    } else {
                        
    //bei der ersten Zeile muss keine Zeile geschlossen werden, nur gemerkt werden, dass jetzt keine erste Zeile merke kommt
                        
    $ersteZeile false;
                    }
                    
    //neue Zeile anfangen und Frage ausgeben
                    
    echo "<tr><td>".$value["frage_text"]."</td>";
                }
                
                
    //Antwort ausgeben
                
    echo "<td>".$value["antwort"]."</td>";
                
    //Frage für nächsten Durchlauf merken
                
    $aktuelleFrage $value["frage_id"];
            }
            echo 
    "</table>";  
        } 
    the0bone

    Wissen ist Macht, nichts Wissen macht nichts! Doch auch auch wenn man es nicht besser weiss, sollte man beim Erstellen einer Webseite auf Frames und Tabellen verzichten.

+ Antworten

Ähnliche Themen

  1. Tabellen - verschiedene zeilenhöhen
    Von elooo im Forum Webdesign allgemein
    Antworten: 3
    Letzter Beitrag: 14.09.2007, 21:53
  2. mySQL Struktur/Zuordnung über eine 3. Tabelle
    Von dieter99 im Forum Traum-Dynamik
    Antworten: 4
    Letzter Beitrag: 29.03.2006, 21:37
  3. CGI-Skript in eine HTML Tabelle einbinden?
    Von Schmiddi im Forum HTML & CSS
    Antworten: 2
    Letzter Beitrag: 18.09.2005, 19:28
  4. MySQL select auf 2 Tabellen, auf eine tabelle limit setzen
    Von Webpicasso im Forum Traum-Dynamik
    Antworten: 0
    Letzter Beitrag: 06.09.2004, 14:08
  5. Hilfe, eine mysql tabelle läßt sich nicht mehr aufrufen
    Von HeinsMarcel im Forum Traum-Dynamik
    Antworten: 1
    Letzter Beitrag: 15.04.2002, 16:06

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51