Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Viiteavainkenttään tallentaminen

mavijo [17.01.2009 19:45:29]

#

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

Vasta_alkaja [17.01.2009 23:59:13]

#

$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ä :)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta