Anzahl der Einträge in einer Tab bestimmen

MirakFH

Mitglied
Hi, ich habe ein kleines Script welches von Außen so aussieht: http://www.hiphop-home.de/images/nora/

Bei jedem Eintrag in diesem Script wird mir eine neue Tabelle erstellt mit diesesn Daten:

id -> partyid -> name -> date -> location -> amount -> path
1 -> 1 -> Bauzen BSE-X-Fest -> 20.10.2005 -> Bauzen bei Berg -> 10 -> /bauzen20102005/

so und ich will jetzt, das er mir xx Einträge erstellt die soaussehen (Anzahl gibt man im Formular bei Bildernazahl ein):

id -> partyid -> name -> date -> location -> amount -> path
1 -> 1 -> Bauzen BSE-X-Fest -> 20.10.2005 -> Bauzen bei Berg -> 10 -> /bauzen20102005/1.jpg
2 -> 1 -> Bauzen BSE-X-Fest -> 20.10.2005 -> Bauzen bei Berg -> 10 -> /bauzen20102005/2.jpg
3 -> 1 -> Bauzen BSE-X-Fest -> 20.10.2005 -> Bauzen bei Berg -> 10 -> /bauzen20102005/3.jpg

und so weiter... Habt ihr mit vllt eien Tipp wie ich da am besten vorgehe?

Wäre echt nett, vielen Dank :D

Hier noch mein Script:

PHP:
<?
$connect = mysql_connect('localhost', '***', '***') or die(mysql_error());
$selectdb = mysql_select_db('usr_web128_1');
if($addparty == "Senden")
{
$maintab = mysql_query("INSERT INTO `main` (`dbname`) VALUES ('".$_POST["dbname"]."')");

$readmain= mysql_query("SELECT * FROM `main` ORDER BY id DESC LIMIT 1"); 
while($line = mysql_fetch_array($readmain))
{
echo "Danke";
}
$createnewtab = mysql_query("CREATE TABLE ".$_POST["dbname"]." (
id int(255) NOT NULL auto_increment,
partyid TEXT NOT NULL,
name TEXT NOT NULL,
date TEXT NOT NULL,
location TEXT NOT NULL,
amount TEXT NOT NULL,
path TEXT NOT NULL,
PRIMARY KEY (id)
);");


$writenewtab = mysql_query("INSERT INTO `".$_POST["dbname"]."` (`partyid`,`name`,`date`,`location`,`amount`,`path`) VALUES
('".$_POST["partyid"]."','".$_POST["name"]."','".$_POST["date"]."','".$_POST["location"]."','".$_POST["amount"]."','".$_POST["path"]."')");

}
else
{
?>
<form name="form1" method="post" action="">
<table width="314" height="162" border="1">
  <tr>
    <td width="140">Name:</td>
    <td width="158">
      <input type="text" name="name">    </td>
  </tr>
  <tr>
    <td>Datenbank-Name:</td>
    <td><input type="text" name="dbname"></td>
  </tr>
  <tr>
    <td>Datum:</td>
    <td><input type="text" name="date"></td>
  </tr>
  <tr>
    <td>Ort:</td>
    <td><input type="text" name="location"></td>
  </tr>
  <tr>
    <td>Bilderanzahl:</td>
    <td><input type="text" name="amount"></td>
  </tr>
  <tr>
    <td>Pfad:</td>
    <td><input type="text" name="path"></td>
  </tr>
  <tr>
    <td>Party-ID:</td>
    <td><input type="text" name="partyid"></td>
  </tr>
</table>
<p>
  <input type="submit" name="addparty" value="Senden">
</p>
</form>
<?
}
?>
 
Eine Frage:
Warum eine neue Tabelle pro neue Party? Wäre es nicht gescheiter eine Tabelle Party zu haben, diese dann mit einer Tabelle mit diversen anderen Inhalten (wenn du eine 1:mc Relation hast) zu verbinden?

Ich weiss ja nicht, wie sehr du dich mit Datenbank Theorie auskennst, aber das Beispiel, das du da aufzeigst ist im höchsten Masse ineffizient. (sorry, dass ich das so sagen muss)

Wenn ich mir deine Oberfläche von der Applikation ansehe, kann ich eine 1:mc (mancher würde auch "eins zu viele" sagen ;) ) Relation zwischen Party und Bilder erkennen, d.h. du brauchst zwei Tabellen, Tabelle Party und Tabelle Bild. Die Tabelle Bild müsste einen Fremdschlüssel zu Tabelle Party beinhalten, damit du mehrer Bilder pro Party zuweisen kannst.

Ich hoffe, das war anschaulich genug.
 
Du machst eine Tabelle für die Party und eine für die Bilder. Bei den Bildern schreibst Du zusätzlich zu den Bilddaten, wie Nummer, Pfad etc., den Primärschlüssel der Partytabelle rein, um eine Verknüpfung zwischen beiden Tabellen herzustellen.

Beschäftige Dich mal mit den Normalformen. Deine Datenstruktur ist (ohne die künstliche id) ein Verstoß gegen die zweite Normalform wie aus dem Lehrbuch.

Gruß hpvw
 
Wie schon der Vorposter sagte: Schau dir mal die Normalformen an.

Wenn du eine redundanzfreie relationale Datenbankumgebung haben willst, ohne all zu viel Aufwand zu betreiben, schlage ich eine Normalisierung bis zum dritten Grad vor.

D.h. folgendes:
1. Atomisieren der Entitäten.
2. Setzen der entsprechenden Relationen
3. Auflösen von netzwerkförmigen Relationen (ok, in deinem Fall gibt es das nicht, aber nur um die Theorie zu vervollständigen)

Wenn du die Theorie genauer nachlesen willst finde ich folgenden Artikel noch brauchbar dazu: Normalisierung (Datenbank)

Um es auf deine Applikation anzuwenden würde ich Folgendes vorschlagen (ich geh mal von einer MySQL DB aus... aber es sollte ein Leichtes sein, dies auf ein anderes System überzuwälzen) :
Code:
Tabelle party
id int(11) auto_increment primary key
name varchar(100) not null
datum date (ich würde hier nicht "date" als Feldbezeichner nehmen, zu gross ist die Konfliktmöglichkeit mit dem entsprechenden Datentyp)
location varchar(100)

Tabelle bild
id int(11) auto_increment primary key
party_id int(11) (dies ist der Fremdschlüssel zur entsprechenden Party)
path varchar(200) (Inhalt könnte etwas länger werden, drum die hohe grösse des Feldes)

Und das wär's dann schon. Wie man abfragen mit SQL über mehrere Tabellen macht, steht in jedem SQL Manual. ;)

Für meinen langen Post will ich jetzt aber ein Dankeschön bekommen! :D (ausser es hilft dir nicht, was ich aber bezweifle)
 
Versteh nicht viel von denien ganen Fremdwörtern ^^

Mein Problem ist eigentlich nur, das ich nicht weiße wie ich die Tabellen anlegen soll und wie viel ich brauch:

Ich brauche Bilder mit Kommentaren, ich will jedes Bild einzeln löschen könne und mir fällt nichts anderes ein wie auf die Art wie ich es vorhabe. Ich weiß das es e ist das ich jedes mal eine neue Tab mache, aber mri fällt nichts anderes ein :D

Aber danke für eure Hilfe so weit...

edit:

Hab mir eure Links mal angeschaut und versteh eigentlich kein Wort... bin ich zu dumm dazu oder ist das so schwer geschrieben?

Das hier zb "Jedes Attribut der Relation ist atomar" ka was das heißen soll...
 
Zuletzt bearbeitet:
Die Erklärung steht doch direkt dahinter:
http://de.wikipedia.org/wiki/Normalisierung_%28Datenbank%29#Erste_Normalform_.281NF.29 hat gesagt.:
Das heißt, man kann kein Attribut in einfachere Attribute aufspalten
Das Beispiel der kommagetrennten Aufzählung von Anastacias Titeln, also die Titelliste, ist ein Verstoß gegen die erste NF. Es darf nur ein Titel in ein Feld eingetragen werden und nicht mehrere.

Nicht gleich beim ersten Satz, der Dir komisch vorkommt aufgeben, sondern auch ein bisschen weiterlesen ;)

Gruß hpvw
 
Ist dein Problem noch aktuell? Sorry für die späte Antwort, aber ich war die letzten paar Tage mit Grippe im Bett und erst jetzt wieder (halbwegs) ok.

Ich würde dir wirklich gerne helfen, nur ist es wirklich schwer, wenn jemand nicht versteht, wie relationale Datenbanken funktionieren. (was ich in deinem Fall annehmen muss, sorry (ich hoff du fühlst dich dadurch nicht angepisst, dass ich das so zum Fakt mache))

Ich muss auch leider sagen, dass darum deine Lösung, so durchdacht sie von dir scheint, schlicht falsch ist und unweigerlich zu Problemen führen wird. Du wirst es möglicherweise am Anfang nicht merken, aber irgenwann wird es zu Inkonsistenz führen. (ja ich weiss, wieder ein Fremdwort)

Lass mich dir sagen, dass Inkonsistenz das Letzte ist, was du in einer Datenbank haben willst.

Wenn du meinen Vorschlag noch genauer willst, sag mir das bitte, dann versuche ich es einfacher zu erklären, falls nicht... auch gut, weniger Arbeit für mich. ;)
 
Zurück