MySQL Daten vertikal in Tabelle ausgeben, (wie) geht das?

@lambda: Leider immernoch Horizontal.
@methodus: Dadurch dasses recht ähnlich aussieht verhlält es sich auch ähnlich! :rolleyes:
Wie gesacht brauch ich die Ergebnisse jeder Zeile zwar in einem Tabellenfeld aber untereinander haben und nicht nebeneinander. Sprich aus Zeile muß Spalte werden. :(

Sonnst müsste ich es wohl anders machen in dem ich für jeden Eintrag (z.B. Name) eine eigene Zeile mach und beim Zuwachs dann in der MySQL Tabelle immer neue Felder dazupacken müsste und dann auch alle Zeilen Bearbeiten müsste was halt zuemlich umständlich ist.
 
Ich hab mir jetzt nicht alle Beiträge angesehen, deshalb entschuldigt bitte, falls ich einen Beitrag wiederhole. Ich schreib mal den PI_mal_DAUMEN-Code für ein zweidimensionales Feld und die Spiegelung dieser Matrix an der Hauptdiagonalen (sowas ähnliches wie 90-Drehung):

PHP:
$result = mysql_query(...);
$num_rows = mysql_num_rows($result);

for( $i=0 ; $i<$num_rows ; $i++ )
{
  $matrix[$i] = mysql_fetch_array($result);
}
// damit müsste die Matrix bestückt sein.

$y_dim = count($matrix);
$x_dim = count($matrix[0]);

for( $i=0 ; $i<$y_dim ; $i++ )
{
  for( $j=0 ; $j<$x_dim ; $j++ )
  {
    $tmp_matrix[$j][$i] = $matrix[$i][$j];
  }
}
$matrix = $tmp_matrix;
// $matix ist jetzt gespiegelt.

Sicherlich gibt es elegantere Wege als diesen. Ich bin eben kein PHP-Profi.

Gruß
Falk
 
Hm, hoffentlich jetzt keine Dopplung aber der leichteste weg ist wie im zweiten Post beschrieben einfach alle Werte auszulesen und dann wie folgt anzuzeigen

PHP:
<table>
 <tr>
while(...)
{
  <td>
   Inhalte
  </td>
}
 </tr>
</table>

und fertig das ganze - alles andere ist unnötige herumschubbserei und passt in den Bereich "Warum einfach, wenn es auch kompliziert geht"!!
 
folge dem weißen kaninchen! :p

nachteil bei der methode ist aber dass man dann wieder 2 schleifen brauch um diese matrix wieder in eine darstellbare form zu bringen. um eleganz gehts ja eigentlich nicht, sind dann aber _4_ forschleifen!

probier mal das hier:
PHP:
<?
for($i=0;$i<mysql_num_rows($res);$i++){
   $array[] = mysql_fetch_row($res); // wir brauchens komplett! also alles rein was da is.
}
for($i=0; $i<count($array); $i++){
  echo "<tr>";
  echo "<td>".mysql_field_name($res, $i)."</td>";
  for($j=0; $j<count($array[$i]); $j++){
    echo "<td>".$array[$i][$j]."</td>";
  }
  echo "</tr>";
}
?>
das sind jetzt 3 for-schleifen, wenn wirklich noch was mit weniger geben sollte, bin ich gespannt. wie immer nicht getestet und auf eigene gefahr

@sebstianus: wenns so einfach wäre, würden wir uns bestimmt nicht so abmühen *fg*
 
Zuletzt bearbeitet:
@vogtländer: Bin auch kein PHP Profi, daher die Frage: Der Code sieht ja schon gut aus, aber wie Fahre ich denn Fort mit der Ausgabe?

@Sebastianus: Ja, das stimmt schon! Aber diesen Part müsste ich für jedes Feld neu schreiben. Bei 20 Feldern der Part 20 mal stehen. Das wäre glaube ich dann doch zuviel Code oder?
 
Korrektur meines Codes:

count($matrix[0]) zählt auch die Felder mit, in denen die Feldnamen stehen. Zumindest wird $y_dim zu groß.

count($matrix[0])/2 müsste gehen.

Gruß
Falk
 
ich denke besser wirste es nicht hinbekommen! ;)
Bin grad was einkaufen gewesen deswegen die Antwort so spät sry!!
PHP:
<?
$db_host ="localhost";
$db_user ="";
$db_pass ="";
$db_database ="";
$table = "";

$conn = mysql_pconnect($db_host,$db_user,$db_pass) or die("connection failed!<br>".mysql_error());
mysql_select_db($db_database,$conn) or die("fehler".mysql_error());

?>
<table  cellspacing="1" cellpadding="1">

<?
$res = mysql_query("select * from $table");
$cols = mysql_num_fields($res);
for($i=0;$i < $cols ;$i++){
	$res = mysql_query("select * from $table");
	echo "<tr bgcolor=\"#CCCCCC\">";
	echo "<td>".mysql_field_name($res, $i)."</td>";
	while($row = mysql_fetch_row($res) ){
		echo "<td>$row[$i]</td>";
	}
	echo "</tr>\n";
}
?>
</table>
 
Zuletzt bearbeitet:
bei 300 datensätzen macht das 301 datenbankabfragen, hmm... auch nich so das wahre oder?

ich sehe schon, is wohl doch nicht so leicht. aber so schwer wirds doch nicht sein ne mysql-tabelle vertikal auszugeben!
 
Ausgabe:
PHP:
echo "<table>";

for( $i=0 ; $i<$x_dim ; $i++ )
{
  echo "<tr>";

  for( $j=0 ; $j<$y_dim ; $j++ )
  {
    echo "<td>".$matrix[$i][$j]."</td>";
  }
  echo "</tr>";
}

echo "</table>";

Sollte funktionieren.

Gruß
Falk
 
Es gibt nur soviele abfragen wie es Spalten in der Tabelle gibt!

bei z.b. einer Gästebuchtabelle sind es halt dann
Id
Name
Text

also insgesammt wären es dann 4 abfragen.
die erste hollt sich nur die Spaltennamen,
und die anderen 3 dann die Daten innerhalb der Spalten!

ihr werdet es nicht besser hinbekommen wie bei meinem Poste oben!
PHP:
<?
$db_host ="localhost";
$db_user ="";
$db_pass ="";
$db_database ="";
$table = "";

$conn = mysql_pconnect($db_host,$db_user,$db_pass) or die("connection failed!<br>".mysql_error());
mysql_select_db($db_database,$conn) or die("fehler".mysql_error());

?>
<table  cellspacing="1" cellpadding="1">

<?
$res = mysql_query("select * from $table");
$cols = mysql_num_fields($res);

/*
falls oben die Spaltennummer noch angezeigt werden soll
*/
/**/   echo "<tr>";
/**/   echo "<td>Name</td>";
/**/   $iCount = 1;
/**/   while($row = mysql_fetch_row($res) ){
/**/      echo "<td>$iCount</td>";
/**/      $iCount++;
/**/   }
/**/   echo "</tr>";
/*
ende
*/


// eigentliche Datenbank ausgabe
for($i=0;$i < $cols ;$i++){
    $res = mysql_query("select * from $table");
    echo "<tr bgcolor=\"#CCCCCC\">";
    echo "<td>".mysql_field_name($res, $i)."</td>";
    while($row = mysql_fetch_row($res) ){
        echo "<td>$row[$i]</td>";
    }
    echo "</tr>\n";
}
// ende
?>
</table>

das einzige was man höchstens noch verbessern könnte,
wäre wenn man nur die Daten rausholt die benötigt werden
-> $res = mysql_query("select <spalte> from $table");

aber wieso unnötig kompliziert machen ^^...
 
Zuletzt bearbeitet:
Zurück