Olen tässä tullut huomanneeksi että MySQL-tietokannassa pääavainkenttä ei tallennukaan automaattisesti sille määritettyyn viiteavainkenttään toisessa taulussa. On kaksi taulua joissa molemmissa auto_increment-pääavain. Toisessa taulussa lisäksi viiteavainkenttä, johon toisen taulun pääavain olisi tarkoitus tallentaa.
Taulussa companies viiteavain on tuo userid, ensin kuitenki pitäisi hakea muuttujaan $ID tieto users taulun pääavaimesta user_id:sta. Tuota kyselyä en onnistu tekemään oikein. Vai onko joku viisaampi tapa suoriutua tästä?
Tämmöisillä lauseilla yritän toteuttaa ylläolevaa:
<?php $sql = "INSERT INTO users (tunnus, salasana, level) VALUES ('$tunnus','$salasana','$level')"; $result = query($sql); //tähän väliin pitäisi hakea tieto muuttujaan $ID $sql = "INSERT INTO companies (userid, name, address, zip, city) VALUES ('$ID', '$name', '$address', '$zip', '$city')"; $result = query($sql); if (mysql_affected_rows() > 0) { echo "Seuraava tietue lisättiin onnistuneesti: <br>\n"; echo "'$tunnus', '$salasana', '$level', '$user_id','$name', '$address', '$zip', '$city' \n"; } else { echo "Tietuetta EI lisätty!<br>\n"; } ?>
Olisiko järkevämpää muuttaa taulujen rakennetta ja tallennusjärjestystä näin: määritellä vain users-taulun pääavain autoincrementiksi, ja antaa ylläpitäjän määritellä companies-taulun pääavaimen, esim. muotoon "SONERA", ja sitten tämä sama tieto vietäisiin users-taulun kenttään companyid. Tällöin ensin tallennettaisiin companies-tauluun ja sitten vasta users-tauluun.
Kiitokset avusta, joka tulee enemmän kuin tarpeeseen!
Mod. lisäsi kooditagit
$k = "INSERT INTO taulu SET tieto"; if(!($t = mysql_query($k))) return; $lisattyId = mysql_insert_id(); $k2 = "INSERT INTO taulu (id,....) VALUES('lisattyId'...)
jos oikein ymmärsin ongelmasi. Eli tallennetaan toiseen tauluun viimeisimmän autoincerent arvon saanut id jne..
Voi olla kirjoitusvirheitä :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.