2017-10-12 3 views
1

ich einige Zeilen (Benutzer) aus einer Tabelle zu löschen mithilfe der folgenden AbfrageZeilen löschen aus der zweiten Tabelle, wenn der entsprechende Benutzer aus der ersten Tabelle gelöscht

DELETE 
FROM 
    rfs_users 
WHERE 
    ID > 1 AND user_registered < '2017-05-16 12:09:54' AND user_login NOT IN ('username1', 'username2') 

ich einen anderen Tisch haben und ich brauche auch um einige Zeilen daraus zu löschen. Diese Tabelle (rfs_usermeta) hat eine andere Struktur und ich kann dieselbe Abfrage nicht verwenden.

In rfs_users entspricht eine Zeile einem Benutzer. In rfs_usermeta entspricht mehrere Zeilen einem Benutzer. Ich könnte einfach verwenden

aber das würde fast alle Zeilen löschen. Ich muss einen Benutzer in rfs_usermeta löschen, wenn dieser Benutzer auch in rfs_users gelöscht werden soll.

Zum Beispiel:

// loop rows in rfs_users 
for (row in rfs_users) { 
    // target specific rows 
    if (row.user_id > 1 && row.user_registered < '2017-05-16 12:09:54' && !('username1', 'username2').includes(row.user_login)) { 
     // delete matching row 
     row.remove() 
     // also delete rows from rfs_usermeta 
     rfs_usermeta.getRows(row.user_id).remove() 
    } 
} 

Wie kann ich diese Abfrage bilden?

Antwort

2

Hat die usermeta eine Fremdschlüsseleinschränkung für die Tabelle users? Wenn ja, können Sie festlegen, was in der referenzierten Zeile passiert.

Sie können automatisch entsprechende Zeilen entfernen, indem die Fremdschlüssel in die usermeta wie folgt ergänzt:

ALTER TABLE usermeta ADD CONSTRAINT FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE; 

Diese alle usermeta Zeilen entfernt, die einen entfernten Benutzer verweisen.

Wenn Sie dies nicht tun möchten, können Sie der Benutzertabelle auch einen Trigger hinzufügen, der usermeta Zeilen entfernt.

this helps;)

+0

Dies hat den Trick gemacht. Allerdings musste ich nachsehen, weil ich SQL nicht wirklich beherrsche. [Fremdschlüssel Einschränkung] (https://www.w3schools.com/sql/sql_foreignkey.asp) half mir, es zu verstehen. – akinuri

1

Run diese alter.On Kaskade automatisch kümmern diese gelöscht.

alter table rfs_usermeta modify constraint fk_name foreign key (user_id) references rfs_users (ID) on delete cascade; 
Verwandte Themen