2016-05-02 6 views
0

Wir haben eine Tabelle, in der wir die Anzahl der Zeilen pro Benutzer auf eine bestimmte Anzahl begrenzen. Vor dem Einfügen prüfen wir, ob der Benutzer die Speicherkapazität überschritten hat (Anzahl der Zeilen) und fügen Sie sie dann entsprechend ein. Zum BeispielMySQL - Überprüfung der maximalen Zeilenanzahl während des Einfügens

select count(id) from items where user=123; 

sagen, wenn < 10 zählen,

insert into items set user=123, a=xyx; 

Doch dieser Ansatz zwei Abfragen erfordert. Gibt es einen Weg, auf dem in einer einzigen Abfrage gearbeitet werden kann?

Danke

+0

Sie einen Insert-Trigger verwenden können, dass überprüfen und automaitcally den Einsatz bei Bedarf gelöscht werden. Aber das sind in Wirklichkeit auch 2 Abfragen –

+0

stattdessen kann man eine Prozedur verwenden –

Antwort

0

So ziemlich jede Annäherung, die Sie nehmen, erfordert zwei Fragen. Ob Sie dies in einem Trigger oder in Anwendungscode tun, ist eine Frage der Wahl. Wenn Sie Ihre Methode verwenden, fügen Sie einen Index items(user) hinzu. Dies wird es billig machen, die Anzahl der Zeilen zu zählen.

Eine Alternative besteht darin, für jedes Element einen Wert in der Benutzertabelle zu erhöhen. Wenn ein Benutzer ein Element einfügt, dann inkrementieren Sie users.itemcount. Denken Sie jedoch daran, die Anzahl zu verringern, wenn Sie Elemente löschen.

0

Wenn Sie nur 1 Abfrage in einem Code haben wollen, können Sie versuchen bedingten Einsatz mit Ansatz verwenden hier beschriebenen MySQL Conditional Insert

Verwandte Themen