Ausgabe von MySQL Daten

Skaterfranky

Grünschnabel
Hi,
ich habe den gestrigen Abend genutzt, um meine sehr schwachen php Kentnisse etwas auszubauen. Ich habe ein Formular erstellt, dass in einer vorgegebenen Datenbank eine Tabelle mit dem Namen $Titel erstellt. Die Tabelle ist in 7 weitere Spalten untergliedert, in denen die Eingaben des Formulars gespeichert werden.
Im Prinzip funktioniert auch die Ausgabe. In einer Tabelle werden Bilder und andere Daten wieder ausgegeben, die in der Datenbank liegen.
Mein Problem ist nun aber folgendes:

PHP:
$dbcon = mysql_connect ("localhost", "***", "*****")
$dbsel = mysql_select_db ("***", $dbcon);

$Eins = mysql_query ("SELECT Spalte_1 FROM Tabellenname");
while ($EinsEins = mysql_fetch_array($Eins)) {
$Spalte_1 = $EinsEins["Spalte_1"];
}

So sieht ein abgespeckter Auszug von meinem Code für die Datenbankabfrage aus. Die Ausgabe, die sich im selben File befindet, schaut dann in etwa so aus:

PHP:
<table>
  <tr>
    <td>
    <img src="prev_thumb/<? echo ("$Spalte_1"); ?>.jpg" border="0"></a>
    </td>
   </tr>
</table>

Füge ich nun weitere Daten in die Datenbank ein, werden diese natürlich erst gar nicht ausgelsen, da ich nur von "Tabellenname" - sprich nur von einer im Vorfeld festgelegten Tabelle die Daten aufnehme. Womit sich meine erste Frage stellt. Wie lese ich alle erzeugten Tabellen aus ? Dabei soll aber im html auch eine neue Tabelle entstehen. Zusätzlich sollten diese nach Eintragsdatum geordnet sein - Legt MySQL dazu automatisch Daten an oder müssen diese auch per Eingabe erfolgen ?

Ich hoffe, dass man mir bei dem Problem helfen kann und die Beschreibungen ausreichen ;)

mfg

niklas
 
Also verstehe ich richtig, das du für jeden Eintrag in die Datenbank eine neue Tabelle anlegst? Das ist höchst unnormal! ;)

Eine Datenbank ist gut gebaut, und hält was aus, also sollte man dort getrost auch mehr Datensätze als nur einen hinterlegen!

Ein weiteres Feld in der Tabelle, in welches du einen Timestamp speicherst hilft dir, die Daten nach Datum zu sortieren.

Oder aber ich hab dich gerade evtl doch falsch verstanden!?
 
Zum einen musst du wissen, wie as Ergebnis aussieht, das du bekommst. Wenn du weißt, das Ergebnis hat 3 Spalten, aber X Zeilen, kannst du folgenden Code verwenden, um die Ausgabe hinzubekommen:
PHP:
<?
$sql = "SELECT spalte1, spalte2, spalte3 FROM tabelle";
$ressource = mysql_query($sql) or die (mysql_error());
if(mysql_num_rows() > 0)
{
  echo '<table>';
  while($data = mysql_fetch_array($ressource)
  {
    echo '<tr><td>'.$data[0].'</td><td>'.$data[1].'</td><td>'.$data[2].'</td></tr>';
  }
  echo '</table>';
}
mysql_free_result($ressource);

Alle Tabellen auf einmal kannst du nicht ausgeben - Dafür bräuchtest du verschiedene SQL-Statements oder du schaust nach, welche Tabellen es in der Datenbank gibt mittels mysql_list_tables().

Beispiel aus dem Manual:
PHP:
<?php
$dbname = 'mysql_dbname';

if (!mysql_connect('mysql_host', 'mysql_user', 'mysql_password')) {
    echo 'Keine Verbindung zur Datenbank möglich';
    exit;
    }

$result = mysql_list_tables($dbname);
    
if (!$result) {
    echo "DB Fehler, Tabellen können nicht angezeigt werden\n";
    echo 'MySQL Fehler: ' . mysql_error();
    exit;
}

while ($row = mysql_fetch_row($result)) {
    echo "Tabelle: $row[0]\n";
}

mysql_free_result($result);
?>

Nach der 3. Normalform einer relationalen Datenbank müsstest du eine Spalte als Index haben, die auf auto_increment gesetzt ist. Anhand dieser Spalte kannst du nach erstellen des Datensatzes sortieren (Ascend / Descending) oder du fügst eine Spalte hinzu, die du in deiner INSERT-Anweisung mittels CURDATE() oder CURRENT_DATE() füllen lässt (dem aktuellen Datum) oder durch eine PHP Variable
PHP:
$datum = date("d.M.YYYY");


Gruß Radhad
 
Vorweg danke für die schnellen Hilfen. Die Information über das Sortieren hat mir allemal weitergeholfen. Aber wäre es denn sinnvoller (und einfacher?) alle Daten in einer MySQL-Tabelle zu speichern ?
Ansonsten versuche ich nun mal Radhads Hilfestellung umzusetzen :)
 
Es kommt immer auf die Größe und auf die Komplexität deiner Datenbank an. Sie sollte Übersichtlich sein, leicht zu lesen und sie sollte keine Redudanzen enthalten.

Wenn du nur eine Tabelle hast wird diese recht schnell zu groß und sehr schwer zu lesen, klar hat diese den Vorteil das du alle deine Daten die du brauchst in einer Tabelle hast.

Schau dir das mal, vielleicht beantwortet das deine Frage besser:
Normalformen
 
Das kommt darauf an was du für Daten in die Tabellen speichern willst. Bei den Relationalen DBMS gib es sowas wie Normalformen. Die man einhalten sollte (man muss nicht aber man kann). Bevor ich dir hier aber die Normalformen erkläre lies dir lieber http://de.wikipedia.org/wiki/3NF durch. Da ist es recht übersichtlich erklärt.
€: Auch zu langsam *snief*
 
Zuletzt bearbeitet:
Die Sachen auf Wiki sehen sehr aufschlussreich aus. Muss nun aber vorerst mal Weg versuche heute Abend dann aber mal das ganze ein wenig umzustrukturieren. Größentechnisch sollte es wohl überhaupt keine Probleme geben. In 5 Spalten steht entweder eine 0 oder eine 1 und in den anderen beiden ein Wort bzw ein Satz.
Danke für die schnelle Hilfe.
 
Nachtrag: Mist, zu langsam.

Ohne jetzt schulmeisterlich zu klingen.

Mein lieber Radhad, die dritte Normalform einer relationalen Datenbank
sieht ein wenig anders aus als du es beschrieben hast.

Siehe dazu :http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)#Dritte_Normalform_.283NF.29

Des weiteren, wenn der liebe Herrgott gewollt hätte das man Code
dauernd neu schreiben muss, sobald sich die DB Struktur verändert,
hätte er uns wohl kaum das assoziative Array geschenkt.

PHP:
<?php
$sql = "SELECT spalte1, spalte2, spalte3 FROM tabelle";
$ressource = mysql_query($sql) or die (mysql_error());
if(mysql_num_rows() > 0)
{
  echo '<table>';
  while($data = mysql_fetch_assoc($ressource)
  {
    echo '<tr><td>'.$data['spalte1'].'</td><td>'.$data['spalte2'].'</td><td>'.$data['spalte3'].'</td></tr>';
  }
  echo '</table>';
}
mysql_free_result($ressource);
 
@3. NF: ich wollte es für ihn nur kurz & knapp halten, weil viele damit Probleme haben. Ich wollt ihm nur die rasche Hilfestellung geben, wie er die Datensätze nach dem Eintragszeitpunkt sortieren kann (bei einem nummerischen Index).

Und bzgl. mysql_fetch_assoc() geb ich dir Recht, aber mysql_fetch:array() kann dies ebenso - assoziativ oder anhand eines Indexes!
 
Zurück