Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Kahteen tauluun tallentaminen yhdellä UPDATE lauseella

mavijo [11.01.2009 22:34:12]

#

Tämännäköisellä koodinpätkällä yritän tallentaa MySQL-tietokantaan käyttäjän muokkaamaa tietoa kahteen tauluun yhtä aikaa, mutta huonolla menestyksellä.
Vastaus on aina vaan "Tietuetta EI muokattu" ja kaikenlaista on jo kokeiltu. Joku tarkka voi huomata että 4 muuttujaa jää tallentamatta, mutta ne ovat lomakkeella "hidden"-kentissä, jottei kayttäjä voi niitä muokata. Osaako kukaan opastaa oikeaan suuntaan? Kiitokset etukäteen.

Koodi:

//Tietueen päivittäminen
function paivita_tietue($user_id, $tunnus, $salasana, $last_load, $istunto, $level, $company_id, $name, $address, $zip, $city, $phone, $fax, $internet, $email, $support)
{
         $sql = "UPDATE users, companies
                SET users.tunnus='$tunnus',
                users.salasana='$salasana',
                users.level='$level',
                companies.name='$name',
                companies.address='$address',
                companies.zip='$zip',
                companies.city='$city',
                companies.phone='$phone',
                companies.fax='$fax'
                companies.internet='$internet',
                companies.email='$email',
                companies.support='$support',
                WHERE users.user_id='$user_id' AND companies.userid='$user_id'";
        $result = query($sql);
        if (mysql_affected_rows()  > 0) {
          echo "Tietue muokattiin onnistuneesti.<br>\n";
          echo "'$tunnus', '$salasana', '$level', '$name', '$address', '$zip', '$city', '$phone', '$fax', '$internet', '$email', '$support' \n";
        } else {
          echo "Tietuetta EI muokattu<br>\n";
        }
}

Mod. lisäsi kooditagit

Grez [11.01.2009 22:48:33]

#

(tässä oli virheellistä tietoa)

Metabolix [11.01.2009 22:50:45]

#

Ensinnäkin on turha laittaa kyselyyn niitä kenttiä, jotka eivät muutu. Erityisesti user_id:n muuttaminen näyttää pahalta kyselyssä. Lisäksi kyselyssäsi asettaisit kaikille käyttäjään viittaaville companies-taulun riveille nuo samat tiedot, onko tämä tosiaan tarkoitus? Järki sanoisi, että haluat päivittää tietyn users-rivin ja tietyn companies-rivin, jolloin tulisit hyvin toimeen kahdella erillisellä kyselyllä.

SQL-debuggauksen perusteet: katso, mitä SELECT sanoo samoilla tauluilla ja ehdoilla.

En tuosta Grezin sanomasta tiedä, mutta tein testitauluuni vastaavan kyselyn, joka kyllä toimi oikein hyvin. Kas näin:

SELECT * FROM hylly, tuotteet
WHERE tuotteet.koodi = 1 AND hylly.koodi = tuotteet.koodi;
+-------------+-------------+----------------+-----------------+
| hylly.koodi | hylly.maara | tuotteet.koodi | tuotteet.nimike |
|           1 |          10 |              1 |          peruna |
+-------------+-------------+----------------+-----------------+
UPDATE hylly, tuotteet
SET
  hylly.maara = 20,
  tuotteet.nimike = 'bataatti'
WHERE
  tuotteet.koodi = 1 AND
  hylly.koodi = tuotteet.koodi;
SELECT * FROM hylly, tuotteet
WHERE tuotteet.koodi = 1 AND hylly.koodi = tuotteet.koodi;
+-------------+-------------+----------------+-----------------+
| hylly.koodi | hylly.maara | tuotteet.koodi | tuotteet.nimike |
|           1 |          20 |              1 |        bataatti |
+-------------+-------------+----------------+-----------------+

Grez [11.01.2009 22:56:54]

#

Ah joo, ajattelin taas jotain muuta tietokantamoottoria kuin MySQL:ää ja MySQLstä sitten varmistin niin tuli vastaan ensin vaan tuo "Single-table syntax" ja sitten on näköjään erikseen "multiple-table syntax". Eli pahoittelut väärästä tiedosta, MySQL:ssä on sittenkin mahdollista päivittää useampaa taulua yhdellä UPDATElla. Kannattaa kuitenkin huomata, että voi rajoittaa porttaamista toisille kannoille jos tuota käyttää.

mavijo [17.01.2009 19:39:55]

#

Sain onnistumaan, kiitos avusta!

Vastaus

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

Tietoa sivustosta