Mysql Insert in For Schleife

speedone

New Member
Hallo

Ich komme einfach nicht dahinter.
Ich habe 4 Werte. Bei jedem Schleifendurchgang sollen sich die zahlen um einen definierten Faktor erhöhen und immer ein neuer Datenbank Eintrag gemacht werden.

So sollen sich in diesem Beispiel die Zahlen verändern:

$k1 sollen im ersten Mysql Eintrag den Wert 40 haben.
im zweiten: 40 mal 1,625 = 65
im dritten 65 mal 1,625 = 105,625
im vierten 105,625 mal 1,625 =...
... bis 25


Die schleife wird 25 mal durchlaufen, aber es entsteht nur ein einziger Datenbank Eintrag???

So sah meine Idee dazu aus:

PHP:
$ID = "1";
$factorres = "1.625"; //Faktor zum erhöhen


$k1a = "40";

$k2a = "100";

$k3a = "50";

$k4a = "60";

$connectionid = mysql_connect ($server, $name, $pass);
$select_db = mysql_select_db ($datenbank, $connectionid);


for($i = 1; $i < 26; $i++)
{

    if($i == 1)
    {
    $k1 = $k1a;
    $k2 = $k2a;
    $K3 = $k3a;
    $k4 = $k4a;
    }
    ELSE
    {
    $k1 = $k1 * $factorres;
    $k2 = $k2 * $factorres;
    $k3 = $k3 * $factorres;
    $k4 = $k4 * $factorres;
    }

mysql_query("INSERT INTO tabelle SET ID='$ID', Stufe='$i', Kosten1='$k1', Kosten2='$k2', Kosten3='$k3', Kosten4='$k4'");

echo "Durchgang ";
echo $i;
echo "durchlaufen...<br>";
}
 
Last edited by a moderator:
Da mysql_query einen Fehlercode zurückliefert, möchtest du den vielleicht auswerten und anzeigen. ID ist nicht zufällig der Primary Key in der Tabelle?
 
Was kommt hierbei raus:
PHP:
$query = "INSERT 
            INTO 
              tabelle 
            SET 
              ID='$ID', 
              Stufe='$i',
              Kosten1='$k1', 
              Kosten2='$k2', 
              Kosten3='$k3', 
              Kosten4='$k4'";
              
mysql_query($query) or die ("MySQL-Fehler: " . mysql_error());

Eine ID sollte eigentlich auf auto_increment eingestellt sein, dann muss man sich auch nicht mehr darum kümmern.

Gruß
Uwe
 
Der Fehler ist "MySQL-Fehler: Duplicate entry '1' for key 1"
ID ist bei mir der Primäre Key...
Das mit dem Primären Key habe ich auch noch nicht ganz verstanden :confused:

Ich kann aber kein auto_increment benutzen, weil ich 25 Werte brauche, die alle die ID=1 haben.
Der Spaltenname ID steht hier eher für einen Namen...

Wenn ich alle Werte einzeln in phpmyadmin eingebe geht das ja auch?

Ich habe jetzt den Primären Key auf Stufe gestellt und es klappt :)
 
Last edited by a moderator:
Du siehst Primary Keys eher als Hindernis an, die dir das Leben schwer machen. Eigentlich sind Primary Keys was positives. Wenn du später mal was Löschen oder Updaten musst, ist es einfach für dich, wenn du einen KURZEN primary Key hast, den das Datenbanksystem schnell finden kann.

Der Primary Key muss eindeutig sein, deswegen funktioniert es auch nicht eine zweite identische ID einzutragen.

Falls dich die Theorie dahinter interessiert, gibt es bei Wikipedia einen ganz guten Artikel:
Schlüssel (Datenbank) - Wikipedia


Ansonsten versuche einen kurzen Primärschlüssel zu finden. Also irgendeine Spalte, in der jeder Wert nur einmal vorkommen kann. Deine "Stufe" wird da vermutlich nicht lange funktionieren, weil irgendwann ein Benutzer mit der gleichen Stufe dazukommt.


Falls du bei den bestehenden Spalten keinen guten Primärschlüssel findest, ist es immer noch besser eine ID hinzuzufügen, die auch wirklich eindeutig ist und diese als Primärschlüssel zu nehmen. (eigentlich sollte ID = Identificator das sowieso sein)

Vermutlich ist dein Datenbankschema sowieso nicht ganz ideal. Sind die 4 Kostenwerte immer ausgefüllt? Warum gerade 4? Ist das irgendeine Obergrenze, die du angenommen hast, oder sind es tatsächlich immer 4?
 
Last edited by a moderator:
danke für die Antworten,
ich habe es jetzt so gemacht, das ID mit auto_incriment gezählt wird und dies jetzt der Primäre Key ist. Die alte ID habe ich einfach zu UID umbenannt(passt zum Namen)
So sollte ich keine Probleme mehr bekommen
 
Back
Top