Verbinden von HTML-Tabellenzellen mit gleichem Inhalt

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

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 :wink:

//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.

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.

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

Belaste doch nur einmal die DB und lass den Rest von php erledigen. Abfragen innerhalb von Schleifen… das ist alles, nur nicht performant.

Da hast du recht, war geistig wohl abwesend :wink:

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]

<?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 ""; }; ?>
header1 header2
".$row[0]."".$row[1]."
[/HTML]

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]);
}
}
?>

<?php $rowspanset = false; foreach ($tmp_arr as $key => $value) { echo ''; foreach ($value as $key2 => $value2) { if(!$rowspanset) { $rowspan_val = ($value[0]>1)?' rowspan="'.$value[0].'"':''; echo ''.$value[1].''; echo ''; $rowspanset = true; } elseif($value[0] == 1) break; else { for($i=3; $i < count($value); $i++) { echo ''; echo ''; } break; } } echo ''; $rowspanset = false; } ?>
header1 header2
'.$value[2][0].'
'.$value[$i][0].'
[/PHP]

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

Hi, könnte man das nicht einfacher mithilfe von http://php.net/manual/de/function.array-unique.php lösen?

Also wie gehabt den Inhalt der DB in ein Mehrdimensionales Array schreiben und dann jede Spalte mithilfe von array_unique() auf doppelte Werte prüfen.

@Markus92

Hast du des jetzt soweit hinbekommen?

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…

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.

Oh mein Gott, ich habe das Thema völlig verfehlt :eek: