• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Verbinden von HTML-Tabellenzellen mit gleichem Inhalt

Markus92

Mitglied
Hallo,

ich habe ein Problem, ich habe eine Tabelle, die ähnlich dieser aussieht:

header1 header2
A B
A C
A D
E F
E G
H I

Die Daten dieser Tabelle werden aus einer Datenbank ausgelesen und in dieser Tabelle dargestellt.

Nun möchte ich die Tabelle dahingehend verändern, dass automatisch das daraus wird:

header1 header2
| B
A C
| D
E F
| G
H I

Aus den 3 A soll eine große A-Zelle und aus den 2 E eine große E-Zelle werden.

Wie kann man sowas realisieren?
Danke schonmal für die Hilfe
Gruß Markus
 
Zuletzt bearbeitet:
Werbung:
Das ist PHP aber da die Tabellen aus Datenbanken füllst hast du ja PHP am laufen sende mal den relevanten Code und dann kann man dir helfen ;)

//Edit:
du kannst in der Schleife die du ja wahrscheinlich hast um den Tabellen Inhalt aufzubauen eine Variable $merker setzen in wo letzte Wert mit dem aktuellem verglichen wird sollten beide übereinstimmen gibst du keinen Wert aus.
 
Zuletzt bearbeitet:
Hallo,

ich habe ein Problem, ich habe eine Tabelle, die ähnlich dieser aussieht:

header1 header2
A B
A C
A D
E F
E G
H I

Die Daten dieser Tabelle werden aus einer Datenbank ausgelesen und in dieser Tabelle dargestellt.

Nun möchte ich die Tabelle dahingehend verändern, dass automatisch das daraus wird:

header1 header2
| B
A C
| D
E F
| G
H I

Aus den 3 A soll eine große A-Zelle und aus den 2 E eine große E-Zelle werden.

Wie kann man sowas realisieren?
Danke schonmal für die Hilfe
Gruß Markus

Erst per "GROUP BY header1" die erste Spalte abfragen und durch eine Schleife laufen lassen.
In dieser Schleife dann jeweils eine weitere MySQL-Abfrage ausführen, welche per "WHERE header1 = '$row[header1]'" die zugehörigen Einträge filtert.
Das Result dann nochmal durch eine Schleife laufen lassen.
 
Werbung:
Also wenn es rein um das Aussehen der Table geht dann sollte dir das Attribut rowspan helfen, falls das noch gültig ist. Aber konnte nichts finden das dies nun nicht gültig sein sollte
 
Erst per "GROUP BY header1" die erste Spalte abfragen und durch eine Schleife laufen lassen.
In dieser Schleife dann jeweils eine weitere MySQL-Abfrage ausführen, welche per "WHERE header1 = '$row[header1]'" die zugehörigen Einträge filtert.
Das Result dann nochmal durch eine Schleife laufen lassen.
Belaste doch nur einmal die DB und lass den Rest von php erledigen. Abfragen innerhalb von Schleifen... das ist alles, nur nicht performant.
 
Werbung:
Hallo ihr,

danke schonmal für eure Antworten.
Wie ich das mache, dass ich herausfinde ob der erste werte dem nächsten ersten wert entspricht wäre ich noch selbst drauf gekommen.
Mir gehts eher darum, wie ich das im html darstelle, ich die tabelle ja per schleife erstelle, das heißt ich mach eine abfrage mit php und sql. Für jeden gefunden Wert wird eine Zeile erstellt. Wie bringe ich das nun so hin, dass er mir den rowspan vergrößert

javascript oder eine schleife die den rowspan wert enthält?

Vielen Dank schonmal
Gruß Markus
 
Nun, wenn du alles mit php machst und deine Ttabelle so generiert, dann rowspan='$zählervariable';. Sollte doch funktionieren.
 
Wie kann ich das hier abbilden?


HTML:
<table>
<thead>
<tr>
<th>header1</th>
<th>header2</th>
</tr>
</thead>
<tbody>
<?php
$sql="select a,b from table";
mysql_select_db("db",$verbindung);
$abfrage=mysql_query($sql,$verbindung);
while ($row=mysql_fetch_array($abfrage,MYSQL_NUM)){
echo "<tr><td>".$row[0]."</td><td>".$row[1]."</td></tr>";
};
?>
</tbody>
</table>
 
Werbung:
Hi,

unteren Code hätte man auch noch kompakter gestalten können, vor allem auch rekursiver, aber da ich nicht weiß, wie die Tabelle 'table' aufgebaut ist, konnte ich nur mutmaßen und bin davon ausgegangen, dass es wirklich nur zwei Spalten ohne einer Index-Spalte gibt - außerdem ist es schon spät für eine durchdachtere Version. Wer will, darf es effizienter machen.

PHP:
<?php
$sql="select a,b from table";
mysql_select_db("db",$verbindung);
$abfrage=mysql_query($sql,$verbindung);

$db_daten = array();
while ($row=mysql_fetch_array($abfrage,MYSQL_NUM))
{
   $db_daten[] = $row;

};

$tmp = '';
$count = 1;
$tmp_arr = array();
ksort($db_daten);
foreach ($db_daten as $value)
{
   if($tmp == $value[0])
   {
     $count++;
     $tmp_arr[$tmp][0] = $count;
     $tmp_arr[$tmp][1] = $tmp;
     $tmp_arr[$tmp][] = array($value[1]);
     continue;
   }
   else
   {
     $tmp = $value[0];
     $count = 1;
     $tmp_arr[$tmp][0] = $count;
     $tmp_arr[$tmp][1] = $tmp;
     $tmp_arr[$tmp][] = array($value[1]);
   }
}
?>
<table>
<thead>
<tr>
<th>header1</th>
<th>header2</th>
</tr>
</thead>
<tbody>
<?php
$rowspanset = false;
foreach ($tmp_arr as $key => $value)
{
   echo '<tr>';
     foreach ($value as $key2 => $value2)
     {
       if(!$rowspanset)
       {
         $rowspan_val = ($value[0]>1)?' rowspan="'.$value[0].'"':'';
         echo '<td'.$rowspan_val.'>'.$value[1].'</td>';
         echo '<td>'.$value[2][0].'</td>';
         $rowspanset = true;
       }
       elseif($value[0] == 1)
         break;
       else
       {
         for($i=3; $i < count($value); $i++)
         {
           echo '</tr><tr>';
           echo '<td>'.$value[$i][0].'</td>';
         }
         break;
       }
     }
   echo '</tr>';
   $rowspanset = false;
}
?>
</tbody>
</table>
 
Danke für deinen Code, das funktioniert soweit auch ganz gut, habe ihn auf 5 Spalten angepasst.
Allerdings habe ich festgestellt, dass es nun auch Zeilen gibt, bei denen die ersten 3 Spalten übereinstimmen, kann man das auch für diesen Fall anwenden?
Also:
h1 h2 h3 h4 h5
A B C D E
A B C F G
H I J K L
H M N O P
Q R S T U
V W X Y Z
 
Werbung:
Hallo bodo92,

das mit dem array_unique ist ja nur ein ersatz für das if($tmp==$value[0]) also bringt mir das nicht so sehr viel.
 
Hallo ich hatte mir das so vorgestellt aber es funktioniert nicht wie ich es mir dachte hab vorher auch noch nie mit array_unique() gearbeitet, eventuell kann es jemand verbessern würde mich auch interessieren..

Code:
echo "<br/>TEST<br/>";
$tabelle = array(
    array("A", "B", "C", "A", "A"),
    array("A", "A", "C", "C", "D")
);
foreach($tabelle as $spalte) {
    echo "<tr>";
    $spalte = array_unique($spalte);
    sort($spalte);
    $feld = 0;
    while($feld < count($spalte)) {
        echo "<td>" . $spalte[$feld] . "</td>";
        $feld++;
    }
    echo "</tr>";
}

//EDIT: Hab den Fehler verbessert funktioniert soweit.
 
Zuletzt bearbeitet:
Werbung:
Zurück
Oben