php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 19.11.2009, 08:28  
Benutzer
 
Registriert seit: 17.09.2009
Beiträge: 96
PHP-Kenntnisse:
Anfänger
6setzen befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] INSERT INTO zwei Tabellen mit Foreign Key und mehreren Datensätzen - wie?

Neuer Tag, neues Problem:

Ich möchte jetzt Daten in 2 TABLE schreiben. Dabei ist wobei TABLE1 ID = TABLE2 ID1_FK

Ich dachte das ist ganz einfach mit mysql_insert_id() - ist es auch solange man nur ein Record hat. Da ich aber auch oft mehrere Daten (= IDs) hab wird immer nur die letzte als FK geschrieben.

Wie kann man die gerade kreierten IDs (Plural!) in TABLE2 als FK verwenden?

Hat jemand einen Musterskript?
__________________
PHP: 5.1.6
MySQL: 5.0.45
6setzen ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 19.11.2009, 08:55  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Die Beschreibung des Problems ist noch etwas dürftig, ein Beispiel wäre nicht schlecht.
Soweit ich das aber verstehe, wirst du wohl die INSERTs in der Mastertabelle einzeln vornehmen müssen, um anschliessend jeweils die Daten in die Detail-Tabelle zu schreiben, da genügt mysql_insert_id() o.ä.
__________________
Gruss
L
lazydog ist offline  
Alt 19.11.2009, 09:03  
Benutzer
 
Registriert seit: 17.09.2009
Beiträge: 96
PHP-Kenntnisse:
Anfänger
6setzen befindet sich auf einem aufstrebenden Ast
Standard

Ich versuch mal es besser zu beschreiben:

Table1
id
feld1

Table 2
id
feld2
id_t1 (Foreign Key, identisch mit table1.id )

Ich schreibe nun Daten in table1.feld1 , das generiert automatisch table1.id

Soweit alles klar. Jetzt soll aber sofort table2.id_t1 gefüllt werden mit der gerade erst entstandenen id aus table1.

mysql_insert_id() geht soweit ich es verstanden habe nur mit einem Datensatz, mit mehreren geht es nicht. Bei mir kommen die Daten aus einer Abfrage und es sind typischerweise mehrere Daten.

-----
Zur Not könnte ich in table1 ein neues Feld machen mit der id aus dem Array und das dann abfragen und in table2 kopieren. Aber ich ich hab die Erfahrung gemacht das es bei php mehrere Lösungen gibt (und das meine nie bis selten die Beste ist)
__________________
PHP: 5.1.6
MySQL: 5.0.45

Geändert von 6setzen (19.11.2009 um 09:06 Uhr).
6setzen ist offline  
Alt 19.11.2009, 09:14  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Warum soll das nicht gehen?
PHP-Code:
// Beginn Transaktion
$sql "
    INSERT INTO
        mastertabelle(
            attr_1,
            attr_2,
            ...,
            attr_n
        )
    VALUES(
        wert_1,
        wert_2,
        ...,
        wert_n
    )"
;
$ret mysql_query($sql);
if (!
$ret){
    
// Rollback
    
exit($mysql_error());
}
$id mysql_insert_id();
$sql "
    INSERT INTO
        detailtabelle(
            id,
            attr_2,
            ...
            attr_n
        )
    VALUES
        ($id, wert_12,    ..., wert_1n),
        ($id, wert_22,    ..., wert_2n),
        ($id, ...,),
        ($id, wert_n2,    ..., wert_nn)
    "
;
$ret mysql_query($sql);
if (!
$ret){
    
// Rollback
    
exit($mysql_error());
}
// commit; 
Falls du mit den entsprechenden Engines arbetest, solltest du unbedingt innerhalb einer Transaktion arbeiten. Sonst musst du halt selber sicher stellen, dass entweder alle oder keine Daten pro ID eingefügt werden.
__________________
Gruss
L
lazydog ist offline  
Alt 19.11.2009, 09:37  
Benutzer
 
Registriert seit: 17.09.2009
Beiträge: 96
PHP-Kenntnisse:
Anfänger
6setzen befindet sich auf einem aufstrebenden Ast
Standard

Der Code funktioniert, schreibt aber nur eine ID in table2.

Ich hab das aus deinem Code gemacht:

PHP-Code:
foreach($_POST['checkbox'] as $value){
$query_ende .= '('.$value.'),';
}

$sql ="INSERT INTO table1(field1) VALUES ".substr($query_ende,0,strlen($query_ende)-1); 

    
$ret mysql_query($sql);
if (!
$ret){
    
// Rollback
    
exit($mysql_error());
}
$id mysql_insert_id();
$sql "INSERT INTO table2(id_t1) VALUES ($id)";
$ret mysql_query($sql);
if (!
$ret){
    
// Rollback
    
exit($mysql_error());

Mein Problem ist aber das mehrere IDs in TABLE1 kreiert werden.
__________________
PHP: 5.1.6
MySQL: 5.0.45
6setzen ist offline  
Alt 19.11.2009, 09:43  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Ich habe dir ja schon gesagt, dass du die Daten einzeln in die Mastertabelle einfügen musst!
Ausserdem scheint mir dein Datenmodell doch etwas abstrus zu sein.
__________________
Gruss
L
lazydog ist offline  
Alt 19.11.2009, 09:46  
Benutzer
 
Registriert seit: 17.09.2009
Beiträge: 96
PHP-Kenntnisse:
Anfänger
6setzen befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von lazydog Beitrag anzeigen
Ich habe dir ja schon gesagt, dass du die Daten einzeln in die Mastertabelle einfügen musst!
Ausserdem scheint mir dein Datenmodell doch etwas abstrus zu sein.
ok, wie es einzeln geht wusste ich ja schon, das ist aber etwas umständlich. Deshalb such ich ja nach etwas wo es mit mehreren Datensätzen geht. Trotzdem Danke für den Versuch.
__________________
PHP: 5.1.6
MySQL: 5.0.45
6setzen ist offline  
Alt 19.11.2009, 10:06  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von 6setzen Beitrag anzeigen
das ist aber etwas umständlich.
Was soll denn an einer einfachen Schleife umständlich sein?
Zitat:
Zitat von 6setzen Beitrag anzeigen
Deshalb such ich ja nach etwas wo es mit mehreren Datensätzen geht.
Da kannst du noch lange suchen
__________________
Gruss
L
lazydog ist offline  
Alt 20.11.2009, 06:13  
Benutzer
 
Registriert seit: 17.09.2009
Beiträge: 96
PHP-Kenntnisse:
Anfänger
6setzen befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von lazydog Beitrag anzeigen
Da kannst du noch lange suchen
Ich hab das als "geht nicht" interpretiert und bin auf Plan B übergegangen - das ist:

Ich schreibe auch die Source aus der Form ID in TABLE1, dann nehme ich genau die dazugehörige von TABLE1.ID und kopiert die zu TABLE2.ID_T1

PHP-Code:
$sql "INSERT INTO table1 (field1)VALUES 
 ('" 
.implode("'), ('"$_POST['checkbox']) . "')";

mysql_query($sql) or exit(mysql_error());  

$sql "INSERT INTO table2 (id_t1) SELECT table1.id FROM table1 
WHERE field1 IN ('" 
.implode("', '"$_POST['checkbox']) . "') ";
    
mysql_query($sql); 
Ich hab jetzt deinen Skript genommen, weil ich den besser logisch nachvollziehen (und damit auch ändern kann) als den von Black. Danke!

Geht das so oder siehst du gravierende Fehler?
__________________
PHP: 5.1.6
MySQL: 5.0.45
6setzen ist offline  
Alt 22.11.2009, 16:34  
Benutzer
 
Registriert seit: 17.09.2009
Beiträge: 96
PHP-Kenntnisse:
Anfänger
6setzen befindet sich auf einem aufstrebenden Ast
Standard

Ich muss die Frage nochmal erweitern, wie bekomme ich weitere Werte in die DB?

PHP-Code:
$aid $_POST['aid']; // ist immer ein fester Wert

$sql "INSERT INTO table1 (field1)
VALUES ('" 
.implode("'), ('"$_POST['checkbox']) . "')"//Format: ('424'), ('667')

mysql_query($sql) or exit(mysql_error());  

/* TABLE1
| id | field1 | field2 |
|----|--------|--------|
| 21 |  424   |        |
| 22 |  667   |        |
*/

$sql "INSERT INTO table2 (id_t1, field11) 
SELECT table1.id, $aid 
FROM table1 
WHERE field1 IN ('" 
.implode("', '"$_POST['checkbox']) . "') "//Format: ('424','667')
    
mysql_query($sql);  

/* TABLE2
| id | field11| id_t1 |
|----|--------|--------|
| 1  |   11   |  21    |
| 2  |   11   |  22    |
*/ 
Wie bekomme ich z.B. noch einen Wert in TABLE1.FIELD2 aus der DB parts.types WHERE id='424','667' ?

In TABLE2 möchte ich auch noch weitere Werte einfügen, das "implode" Format macht es aber recht schwer wenn die Daten aus einem Array oder aus einer der Form kommen.

Was ist jetzt der beste Weg an die Daten zu kommen? Mit den $_POST['checkbox'] IDs via SELECT, oder in der Form einfach alle Daten die man braucht mit $_POST['******'] rüberbringen (scheint mir einfacher).

Ich bin wie immer über jeden Tip dankbar!
__________________
PHP: 5.1.6
MySQL: 5.0.45
6setzen ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
INSERT INTO eingaben über 2 Tabellen maclaim1988 PHP Tipps 2009 9 04.02.2009 03:30
INSERT INTO beim Anlegen neuer Tabellen? fabbrauchthilfe PHP Tipps 2008 3 20.08.2008 22:51
Self Join / Nested Join ? Ich hab ne Blockade... iangillan Datenbanken 11 06.01.2008 21:37
Pathfinding Algorithmus optimieren? (Algorith. von Dijkstra) Martin13 PHP Tipps 2007 19 04.09.2007 19:20
Verständnisprobleme bei Utf8 > Character Set > Collate erna Datenbanken 4 20.03.2007 14:08
Differenz zwischen 2 Zahlen duderino PHP Tipps 2006 19 10.08.2006 22:12
PRoblem mit Cookie bei PHPbb-Board PHP Tipps 2007 8 12.12.2005 20:56
mysql dump einspielen (ohne phpmyadmin) PHP Tipps 2005-2 6 18.06.2005 21:50
[Erledigt] fehler den ich noch nie gesehen habe Datenbanken 7 09.06.2005 14:29
dynamisches MENÜ aus db lesen.probleme mit SUBid !! PHP Tipps 2005 26 24.03.2005 18:53
dem verzweifeln nahe PHP Tipps 2004 26 24.10.2004 17:28
INSERT INTO mehrere tabellen konsti Datenbanken 3 23.10.2004 19:28
[Erledigt] INSERT INTO SELECT an mehrere Tabellen? Datenbanken 6 17.09.2004 16:57
Zeile einfach überspringen bei Unique-Verletzung tapferesschneiderlein Datenbanken 6 03.09.2004 14:29
HILFE: Column count doesn't match value count at row 1 Datenbanken 17 12.06.2004 16:45

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
insert into foreign key, mysql insert into mehrere tabellen, sql insert into foreign key, insert into fremdschlüssel, insert into sql foreign key, insert into foreign key sql, sql insert into fremdschlüssel, http://www.php.de/php-einsteiger/61383-erledigt-insert-into-zwei-tabellen-mit-foreign-key-und-mehreren-datensaetzen-wie.html, mysql insert into foreign key, sql insert into mit fremdschlüssel, insert into mit foreign key, mysql insert into zwei tabellen, mysql insert into 2 tabellen, sql insert mehrere tabellen, insert into mit fremdschlüssel, sql insert foreign key, sql insert zwei tabellen, insert into with foreign key, insert into mehrere tabellen mysql, insert into 2 tabellen

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:45 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum