Antworten auf deine Fragen:
Neues Thema erstellen

MySQL gleichzeitiges update zweier Tabellen

W

WebmasterHelp

Guest

Hi,

hab ein Problem beim updaten der Datenbank, möchte nämlich zwei Tabellen gleichzeitig aktualisieren. Aber egal wie ich es versuche es wird nie aktualisiert.

Hier mal der Code:
PHP:
    $profile = "UPDATE
                    members a
                INNER JOIN
                    profiles b
                ON
                    a.id = b.id
                SET
                    a.birthday = '" . mysql_real_escape_string($_POST['birthday']) . "',
                    a.email = '" . mysql_real_escape_string($_POST['email']) . "',
                    a.showmail = '" . mysql_real_escape_string($_POST['showmail']) . "',
                    b.homepage = '" . mysql_real_escape_string($_POST['homepage']) . "',
                    b.icq = '" . mysql_real_escape_string($_POST['icq']) . "',
                    b.live = '" . mysql_real_escape_string($_POST['live']) . "',
                    b.skype = '" . mysql_real_escape_string($_POST['skype']) . "',
                    b.facebook = '" . mysql_real_escape_string($_POST['facebook']) . "',
                    b.twitter = '" . mysql_real_escape_string($_POST['twitter']) . "',
                    b.google = '" . mysql_real_escape_string($_POST['google']) . "',
                    b.about = '" . mysql_real_escape_string($_POST['about']) . "',
                    b.signature = '" . mysql_real_escape_string($_POST['signature']) . "'
                WHERE
                    a.id = '" . (int)$_SESSION['id'] .  "'
                AND
                    b.id = '" . (int)$_SESSION['id'] .  "'";

    mysql_query($profile) OR die(mysql_error());
Hier die Tabellenstruktur:

PHP:
CREATE TABLE `members` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(30) NOT NULL,
`password` VARCHAR(255) NOT NULL,
`email` VARCHAR(255) NOT NULL,
`date` DATETIME NOT NULL,
`level` INT(11) NOT NULL,
`hash` VARCHAR(32) NOT NULL,
`active` INT(1) NOT NULL DEFAULT "0",
`status` DATETIME NOT NULL,
`visits` BIGINT(11) NOT NULL,
`showmail` TINYINT(1) NULL,
`birthday` DATE NOT NULL,
`friends` TEXT NOT NULL,
`avatar` VARCHAR(100) NOT NULL DEFAULT "uploads/avatars/default.png",
UNIQUE INDEX email_unique (`email`),
PRIMARY KEY (`id`)
) ENGINE=MYISAM;

CREATE TABLE `profiles` (
`id` INT(11) NOT NULL,
`homepage` VARCHAR(80) NOT NULL,
`icq` VARCHAR(80) NOT NULL,
`live` VARCHAR(80) NOT NULL,
`skype` VARCHAR(80) NOT NULL,
`facebook` VARCHAR(80) NOT NULL,
`twitter` VARCHAR(80) NOT NULL,
`google` VARCHAR(80) NOT NULL,
`about` VARCHAR(500) NOT NULL,
`signature` VARCHAR(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MYISAM;
Hat einer eine Idee?

Mfg
 

Duddle

Posting-Frequenz: 14µHz

AW: MySQL gleichzeitiges update zweier Tabellen

Die Syntax ist in Ordnung. In einem Mini-Beispiel lokal hat es auch funktioniert.

Mein Ansatz wäre jetzt wohl, die Query vor Übergabe mysql_query() ausgeben zu lassen. Entweder siehst du dann dort den Fehler oder du nimmst die Anfrage und machst sie manuell in phpMyAdmin o.ä. Vielleicht wird eine Variable nicht korrekt ausgegeben oder so.


Duddle
 

buerzel

Versuch macht kluch!

Teammitglied
AW: MySQL gleichzeitiges update zweier Tabellen

Deine UPDATE Anweisung bezieht sich doch nur auf die members Tabelle. Der JOIN sorgt noch lange nicht dafür, dass profiles auch aktualisiert wird. Vlt. hilft dir weiter. Vor der Version 5 soll es angeblich nicht möglich sein zwei Tabellen mit einem UPDATE zu aktualisieren.
 

Duddle

Posting-Frequenz: 14µHz

AW: MySQL gleichzeitiges update zweier Tabellen

Vlt. hilft dir weiter.
Dort steht ja die Syntax für das Update von mehreren Tabellen da. Der Ausdruck table_references wird, wie im Text beschrieben, bei der genauer definiert:
Code:
[B]table_references[/B]:
    table_reference [, table_reference] ...

table_reference:
    table_factor
  | [B]join_table[/B]

join_table:
    table_reference [INNER | CROSS] JOIN table_factor [join_condition]
  | table_reference STRAIGHT_JOIN table_factor
  | table_reference STRAIGHT_JOIN table_factor ON condition
  | table_reference LEFT [OUTER] JOIN table_reference join_condition
  | table_reference NATURAL [LEFT [OUTER]] JOIN table_factor
  | table_reference RIGHT [OUTER] JOIN table_reference join_condition
  | table_reference NATURAL [RIGHT [OUTER]] JOIN table_factor
Das ist also laut Syntax problemlos möglich. Für MySQL 4.1 ist es auch ähnlich (weiter habe ich nicht zurückgeschaut).

Dabei werden auch beide Tabellen verändert. Falls du nen MySQL-Server laufen hast, kannst du ja folgendes testen:
Code:
 CREATE TABLE `members` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(30) NOT NULL,
PRIMARY KEY (`id`)
);

CREATE TABLE `profiles` (
`id` INT(11) NOT NULL,
`homepage` VARCHAR(80) NOT NULL,
PRIMARY KEY (`id`)
);

INSERT INTO members (name)
VALUES
('Lorem'), ('ipsum'), ('dolor'), ('sit'), ('amet');

INSERT INTO profiles (id,homepage)
VALUES
(1, 'aaa'), (3,'bbb'), (4,'ccc');



update members a
inner join profiles b
on a.id = b.id
set a.name="coolio", b.homepage = "xxxxx"
where a.id='1' and b.id='1';

select * 
from members a
inner join profiles b
on a.id = b.id;


Duddle
 
W

WebmasterHelp

Guest

AW: MySQL gleichzeitiges update zweier Tabellen

Danke an Alle!
Hab das Problem jetzt gelöst.

Mfg
 
W

WebmasterHelp

Guest

AW: MySQL gleichzeitiges update zweier Tabellen

Hi,

lustiger Weise war mein Versuch eh richtig, der Grund warums nicht ging war: Bei der Registrierung werden die Daten ja in die members Tabelle geschrieben und wenn ein user dann später seine Profil angaben machen möchte werden diese ja in der Tabelle profiles gespeichert. In der WHERE Klausel steht ja:

WHERE
a.id = '"
. (int)$_SESSION['id'] . "'
AND
b.id = '"
. (int)$_SESSION['id'] . "'";


aber profiles ID war ja noch nicht befüllt worden Hab einfach bei der Registrierung die neu angelegte in mit mysql_insert_id() in ner variable gespeichert und in einem separaten query diese ID dann in die profiles Tabelle geschrieben - so ist es dann möglich beide Tabellen gleichzeitig upzudaten da ja die IDs identisch sind und vorhanden :D

Mfg
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben