Comment puis-je avoir une colonne dans une base de données MySQL être une fonction des autres colonnes?

StackOverflow https://stackoverflow.com/questions/1225197

  •  22-07-2019
  •  | 
  •  

Question

Je travaille avec une base de données qui garde la trace du lecteur dans un livre. Je le fais en ayant une colonne de nombre de pages et une colonne de page en cours.

Y a-t-il un moyen d'ajouter une colonne "progress" qui serait égale à (currentpage / pagecount)?

Était-ce utile?

La solution

Vous avez deux options. Vous pouvez soit créer ce champ sur SELECT :

SELECT book_id, user_id, (currentpage/pagecount) AS progress FROM user_books;

Ou créez un VIEW , qui vous permettra de l'interroger sans déclarer explicitement l'opération:

CREATE VIEW user_books_progress AS
  (SELECT book_id, user_id, (currentpage/pagecount) AS progress FROM user_books);

Vous pouvez alors interroger votre vue sous forme de table normale:

SELECT book_id, user_id, progress FROM user_books_progress;

Plus d'informations sur les opérateurs et vues arithmétiques sont disponibles dans la documentation:

  

11.5.1: Opérateurs arithmétiques < br>    12.1.12. Syntaxe CREATE VIEW

Autres conseils

Vous ne pouvez pas définir une colonne comme une fonction. Il existe au moins deux solutions de contournement:

  • Mettez à jour votre colonne de progression à l'aide du déclencheur BEFORE UPDATE. Vous en aurez également besoin d'un pour BEFORE INSERT.
  • Utilisez une vue qui calcule la colonne de progression pour vous.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top