Wie kann ich eine Spalte in einer MySQL-Datenbank eine Funktion von anderen Spalten sein?
Frage
Ich arbeite mit einer Datenbank, die hält, wo ein Leser in einem Buch. Ich tue dies durch eine Seitenanzahl Spalte und eine aktuelle Seite Spalte.
Gibt es eine Möglichkeit, eine Spalte ‚Fortschritt‘ hinzuzufügen, die gleich (current / pagecount) sein?
Lösung
Sie haben zwei Möglichkeiten. Sie können entweder das Feld auf SELECT
erstellen:
SELECT book_id, user_id, (currentpage/pagecount) AS progress FROM user_books;
oder ein VIEW
erstellen, mit dem Sie es, ohne explizit den Betrieb abfragen kann unter Angabe:
CREATE VIEW user_books_progress AS
(SELECT book_id, user_id, (currentpage/pagecount) AS progress FROM user_books);
Dann können Sie einfach Ihre Ansicht als eine normale Tabelle abfragen:
SELECT book_id, user_id, progress FROM user_books_progress;
Weitere Informationen über Arithmetische Operatoren und Ansichten sind in der Dokumentation zur Verfügung:
11.5.1: Arithmetische Operatoren < br> 12.1.12. CREATE VIEW-Syntax
Andere Tipps
Sie können nicht eine Spalte eine Funktion definieren. Es gibt mindestens zwei Abhilfen für diese:
- Aktualisieren Sie Ihre Fortschritte Spalte einen BEFORE UPDATE-Trigger verwenden, müssen Sie einen benötigen für BEFORE und INSERT.
- Verwenden Sie eine Ansicht, die den Fortschritt Spalte für Sie berechnet.