Arbeitet derzeit an einer MySQL-Struktur für eine soziale Netzwerk-Site.MySQL-Limit-Beziehungstabelle mit FIFO
Ich habe eine Anforderung: ein Benutzer kann nur maximal 5 Freunde haben, und beim Hinzufügen eines sechsten würde es den ältesten (FIFO) entfernen, und ich bin mir nicht ganz sicher, was der beste Weg ist, das zu lösen .
In meinem Backend-Code füge ich auch eine Einschränkung beim Hinzufügen eines Benutzers, so dass user1_id < user2_id.
ist die entsprechende Tabelle:
CREATE TABLE friendships (
user1_id INT,
user2_id INT,
date_added DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user1_id)
REFERENCES users (id)
ON DELETE CASCADE,
FOREIGN KEY (user2_id)
REFERENCES users (id)
ON DELETE CASCADE
);
CREATE UNIQUE index single on friendships (user1_id, user2_id);
Ich dachte über einen Trigger und schrieb dies mit:
CREATE TRIGGER inFriendships
BEFORE INSERT ON friendships
FOR EACH ROW
BEGIN
DECLARE current_amount_user1 INT DEFAULT 0;
DECLARE current_amount_user2 INT DEFAULT 0;
SET current_amount_user1 = (SELECT COUNT(*) FROM friendships WHERE (user1_id = NEW.user1_id OR user2_id = NEW.user1_id));
IF current_amount_user1 = 5
THEN
DELETE FROM friendships WHERE date_added IS NOT NULL AND (user1_id = NEW.user1_id OR user2_id = NEW.user1_id) order by date_added desc LIMIT 1;
END IF;
SET current_amount_user2 = (SELECT COUNT(*) FROM friendships WHERE (user1_id = NEW.user2_id OR user2_id = NEW.user2_id));
IF current_amount_user2 = 5
THEN
DELETE FROM friendships WHERE date_added IS NOT NULL AND (user1_id = NEW.user2_id OR user2_id = NEW.user2_id) order by date_added desc LIMIT 1;
END IF;
END;
Aber ich lief mit toten Schlösser ein Problem in und ich versuche jetzt finde eine andere Lösung.
Alle Lösungen und Ideen sind sowohl SQL und Back-End-Pseudo-Code willkommen.
Ich erhalte diesen Fehler: "Tabelle 'Freundschaften' in gespeicherten Funktion/Trigger kann nicht aktualisiert werden, da es bereits von Anweisung verwendet wird, die diese gespeicherte Funktion/Trigger aufgerufen hat ''. – OfekA