Come posso avere una colonna in un database MySQL in funzione di altre colonne?
Domanda
Sto lavorando con un database che tiene traccia di dove si trova un lettore in un libro. Lo faccio avendo una colonna conteggio pagine e una colonna pagina corrente.
C'è un modo per aggiungere una colonna "progress" che sarebbe uguale a (currentpage / pagecount)?
Soluzione
Hai due opzioni. Puoi creare quel campo su SELECT
:
SELECT book_id, user_id, (currentpage/pagecount) AS progress FROM user_books;
O crea un VISUALIZZA
, che ti permetterà di interrogarlo senza dichiarare esplicitamente l'operazione:
CREATE VIEW user_books_progress AS
(SELECT book_id, user_id, (currentpage/pagecount) AS progress FROM user_books);
Quindi puoi semplicemente interrogare la tua vista come una normale tabella:
SELECT book_id, user_id, progress FROM user_books_progress;
Ulteriori informazioni sugli operatori aritmetici e le viste sono disponibili nella documentazione:
11.5.1: Operatori aritmetici < br> 12.1.12. CREATE VIEW Sintassi
Altri suggerimenti
Non è possibile definire una colonna come funzione. Ci sono almeno due soluzioni alternative a questo:
- Aggiorna la colonna dei tuoi progressi utilizzando un trigger PRIMA DI AGGIORNAMENTO, ne avrai bisogno anche per PRIMA DI INSERIRE.
- Utilizza una vista che calcola la colonna di avanzamento per te.