[php/mysql] Spaltenname auslesen

Kantholy

Lt. Junior Grade
Registriert
Aug. 2006
Beiträge
323
Hi, ich fass mich kurz:

Problematik: verschiedene mysqltabellen auslesen und in tabellenform auflisten:

PHP:
$sql = "SELECT * FROM $sqltbl;";

$result = mysql_query($sql) OR error("Anfrage fehlgeschlagen: " . mysql_error());
if($result)
{
	echo "<table>\n";
	while($row = mysql_fetch_assoc($result)) {
	echo "\t<tr>\n";
	    foreach($row as $i) 
		{
			echo "\t\t<td>$i</td>\n";
		}
	echo "\t</tr>\n";
	}
	echo "</table>\n";
}

wie kann ich mir aber nun den Spaltennamen auslesen damit ich diesen zum Beispiel am Anfang in ein th Tag packen kann?
 
Zuletzt bearbeitet: (Syntaxhighlightening vergessen)
phpmyadmin nachprogrammieren?

Man macht kein SELECT *

Und wenn du das nicht machst kennst du auch alle Spaltennamen ;)
 
schon mal an sowas gedacht?
 
Angenommen, deine Tabelle hieße "inhalt" und hätte die Spalten "id" und "name". Nach folgendem Muster würdest Du die Daten holen, um sie tabellarisch ausgeben zu lassen:

Code:
<table>
  <tr>
    <th>Id</th>
    <th>Name</th>
  </tr>
<?php
$sql = mysql_unbuffered_query("SELECT id, name FROM inhalt");
$result = $sql OR error("Anfrage fehlgeschlagen :".mysql_error());

if($result)
{
 while($row = mysql_fetch_assoc($result))
 { ?>
  <tr>
    <td><?php echo $row["id"]; ?></td>
    <td><?php echo $row["name"]; ?></td>
  </tr><?php
 }
}
?>
</table>
 
Mal ne Frage.. wieso soll man eigtl. kein SELECT * machen? Hab das jetzt schon an mehreren Stellen gelesen aber noch nie eine Erklärung wieso.
 
Naja man nimmt eigentlich immer nur die Spalten, die man auch tatsächlich braucht. Das ist erstens schneller und 2. ressourcenschonender. Weiterhin spart SQL einen Arbeitsschritt, indem es die Spalten in der Tabelle nicht erst ermitteln/zusammenstellen muss, sondern nur noch auf Richtigkeit prüfen und dann direkt weiterarbeiten kann.
Also * gilt eher als Unart, auch der Übersichtlichkeit wegen. Auch wenns schneller getippt ist.
 
Wenn ich aber eine ganze Tabelle ausgeben will.. ist dann etwas dagegen einzuwenden?
Ansonsten, nur bei bestimmten Spalten, klar da verwende ich auch SELECT spalte1, spalte2 (...)
 
Schon allein wegen der Einheitlichkeit würde ichs auch da nicht machen.
Aber ich glaube, es macht auch performancemäßig einen Unterschied, weil MySQL dann erst die Spalten selbst ermitteln muss.
 
Ist halt auch alles vom Einsatzzweck abhängig. Bei (mehreren, join) Tabellen mit sehr vielen Spalten und/oder vielen gleichzeitigen Userabfragen und Zugriffen kann sich das durchaus merklich auswirken.
Bei kleinen Tabellen oder Spalteninhalten oder wenig DB-Zugriffen und Abfragen ists speedmäßig natürlich wurscht.
Aber man sollte es sich garnicht erst angewöhnen. Nur mal für schnelle Tests.
 
Zuletzt bearbeitet:
Revontulet schrieb:

joah, hab schon, danke

KonKorT schrieb:
Code:
a lot of kot

danke, aber das ist genau die Variante die ich nicht wollte, ich wollte das ganze auslesen lassen, sodass es tabellen/spaltenunabhängig ist.

von mir persönlich zusammengepfuscht sieht das ganze dann so aus:

PHP:
	$header = 1337;
	while($row = mysql_fetch_assoc($result)) 
	{
		echo "\t<tr>\n";	
		//output table head
		if($header == 1337)
		{
			$i = 0;
			$howmuch = count($row);
			while($i < $howmuch)
			{
				echo "\t\t<th>".mysql_field_name($result, $i)."</th>\n";
				$i++;
			}
			
			$header = 0;
		}
		
		echo "\t</tr>\n";
		echo "\t<tr>\n";
		
			//output everything
			
		    foreach($row as $i) 
			{
				echo "\t\t<td>$i</td>\n";
			}

...
 
Zurück
Oben