Como posso ter uma coluna em um banco de dados MySQL ser uma função de outras colunas?

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

  •  22-07-2019
  •  | 
  •  

Pergunta

Eu estou trabalhando com um banco de dados que mantém o controle de onde o leitor está em um livro. Eu faço isso por ter uma coluna de contagem de página e uma coluna de página atual.

Existe uma maneira de adicionar uma coluna de 'progresso', que seria igual a (currentPage / pagecount)?

Foi útil?

Solução

Você tem duas opções. Você pode criar esse campo em SELECT:

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

Ou criar um VIEW, o que permitirá que você consultá-lo sem declarar explicitamente a operação:

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

Depois, é só consultar a sua vista como uma tabela normal:

SELECT book_id, user_id, progress FROM user_books_progress;

Mais informações sobre Arithmetic Operators and Views estão disponíveis na documentação:

11.5.1: Arithmetic Operators < br> 12.1.12. CREATE VIEW Sintaxe

Outras dicas

Você não pode definir uma coluna para ser uma função. Há pelo menos duas soluções para isso:

  • Atualize seu coluna progresso usando um disparador BEFORE UPDATE, você vai precisar de um para BEFORE INSERT também.
  • Use uma visão que calcula a coluna de progresso para você.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top