Ich habe zwei Tabellen in MySQL
#messages table :
messageid
messagetitle
.
.
#usersmessages table
usersmessageid
messageid
userid
.
.
Wenn ich jetzt aus der Nachrichtentabelle löschen möchte, ist das in Ordnung. Wenn ich jedoch eine Nachricht mit der Nachrichten-ID lösche, ist der Datensatz in der Benutzernachricht weiterhin vorhanden, und ich muss diese beiden Tabellen gleichzeitig löschen.
Ich habe die folgende Abfrage verwendet:
DELETE FROM messages LEFT JOIN usersmessages USING(messageid) WHERE messageid='1' ;
Dann teste ich
DELETE FROM messages , usersmessages
WHERE messages.messageid = usersmessages.messageid
and messageid='1' ;
Diese beiden Abfragen erfüllen diese Aufgabe jedoch nicht.
DELETE a.*, b.* FROM messages a LEFT JOIN usersmessages b ON b.messageid = a.messageid WHERE a.messageid = 1
Übersetzung: Löschen aus der Tabelle Nachrichten wo messageid = 1, wenn Tabelle uersmessages messageid = messageid der Tabelle hat Meldungen , dass die Reihe von löscht uersmessages Tabelle.
quelle
Sie sollten entweder ein
FOREIGN KEY
mit erstellenON DELETE CASCADE
:ALTER TABLE usersmessages ADD CONSTRAINT fk_usermessages_messageid FOREIGN KEY (messageid) REFERENCES messages (messageid) ON DELETE CASCADE
oder verwenden Sie zwei Abfragen in einer Transaktion:
START TRANSACTION;; DELETE FROM usermessages WHERE messageid = 1 DELETE FROM messages WHERE messageid = 1; COMMIT;
Die Transaktion betrifft jedoch nur
InnoDB
Tabellen.quelle
InnoDB
?Sie haben zwei Möglichkeiten:
Führen Sie zunächst zwei Anweisungen innerhalb einer Transaktion aus:
BEGIN; DELETE FROM messages WHERE messageid = 1; DELETE FROM usermessages WHERE messageid = 1; COMMIT;
Oder Sie können ON DELETE CASCADE mit einem Fremdschlüssel einrichten. Dies ist der bessere Ansatz.
CREATE TABLE parent ( id INT NOT NULL, PRIMARY KEY (id) ); CREATE TABLE child ( id INT, parent_id INT, FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE );
Weitere Informationen zu ON DELETE CASCADE finden Sie hier .
quelle
keine Notwendigkeit für JOINS:
DELETE m, um FROM messages m, usersmessages um WHERE m.messageid = 1 AND m.messageid = um.messageid
quelle
DELETE message.*, usersmessage.* from users, usersmessage WHERE message.messageid=usersmessage.messageid AND message.messageid='1'
quelle
Dem OP fehlen nur die Tabellen-Aliase nach dem Löschen
DELETE t1, t2 FROM table1 t1 LEFT JOIN table2 t2 ON t1.id = t2.id WHERE t1.id = some_id
quelle
Versuchen Sie dies bitte
DELETE FROM messages,usersmessages USING messages INNER JOIN usermessages on (messages.messageid = usersmessages.messageid) WHERE messages.messsageid='1'
quelle
Versuche dies..
DELETE a.*, b.* FROM table1 as a, table2 as b WHERE a.id=[Your value here] and b.id=[Your value here]
Ich lasse
id
als Beispielsäule.Ich bin froh, dass das hilft. :) :)
quelle
*
) richtig gerendert wird, müssen Sie die Abfrage mit 4 Leerzeichen davor einrücken .Sie können dies auch verwenden, um einen bestimmten Wert zu löschen, wenn beide Spalten 2 oder viele des gleichen Spaltennamens haben.
DELETE project , create_test FROM project INNER JOIN create_test WHERE project.project_name='Trail' and create_test.project_name ='Trail' and project.uid= create_test.uid = '1';
quelle
Es gibt einen anderen Weg, der hier nicht erwähnt wird (ich habe die Leistung noch nicht vollständig getestet). Sie können das Array für alle Tabellen festlegen -> Zeilen, die Sie wie folgt löschen möchten
// set your tables array $array = ['table1', 'table2', 'table3']; // loop through each table for($i = 0; $i < count($array); $i++){ // get each single array $single_array = $array[$i]; // build your query $query = "DELETE FROM $single_array WHERE id = 'id'"; // prepare the query and get the connection $data = con::GetCon()->prepare($query); // execute the action $data->execute(); }
Dann können Sie den Benutzer auf die Startseite umleiten.
hoffe das hilft jemandem :)
Vielen Dank
quelle