¿Cómo puedo hacer que una columna en una base de datos MySQL sea una función de otras columnas?
Pregunta
Estoy trabajando con una base de datos que realiza un seguimiento de dónde está un lector en un libro. Lo hago teniendo una columna de recuento de páginas y una columna de página actual.
¿Hay alguna forma de agregar una columna de 'progreso' que sea igual a (currentpage / pagecount)?
Solución
Tienes dos opciones. Puede crear ese campo en SELECT
:
SELECT book_id, user_id, (currentpage/pagecount) AS progress FROM user_books;
O cree un VIEW
, que le permitirá consultarlo sin indicar explícitamente la operación:
CREATE VIEW user_books_progress AS
(SELECT book_id, user_id, (currentpage/pagecount) AS progress FROM user_books);
Entonces puede consultar su vista como una tabla normal:
SELECT book_id, user_id, progress FROM user_books_progress;
Más información sobre operadores y vistas aritméticas está disponible en la documentación:
11.5.1: Operadores aritméticos < br> 12.1.12. CREAR VER Sintaxis
Otros consejos
No puede definir una columna para que sea una función. Hay al menos dos soluciones para esto:
- Actualice su columna de progreso usando un disparador ANTES DE ACTUALIZAR, también necesitará uno para ANTES DE INSERTAR.
- Use una vista que calcule la columna de progreso por usted.