Aggiungere una colonna tipo timestamp con una condizione

di il
5 risposte

Aggiungere una colonna tipo timestamp con una condizione

Un saluto a tutti,
avrei cortesemente necessità di un vostro supporto per risolvere un problema che riguarda l'aggiunta di una colonna all'interno di una tabella di un database.

In pratica avrei la necessità di aggiungere una tabella di questo tipo:

ALTER TABLE `appuntamenti`
	ADD COLUMN `data_mod` TIMESTAMP NULL DEFAULT NOW() ON UPDATE NOW() AFTER `data_ins`;
dove nasce il problema ? Avendo un database con oltre 30000 record se eseguissi la query in questo modo, mi ritroverei la colonna data_mod valorizzata alla data odierna anche sugli interventi passati, quindi vorrei eseguire la query impostando una condizione:

Aggiungi una colonna data_mod e valorizzala con la data odierna ma invece di mostrare la data_ins mostra una testo "Dato non disponibile".

Si può fare una cosa del genere ?

Grazie infinite anticipatamente a tutti

5 Risposte

  • Re: Aggiungere una colonna tipo timestamp con una condizione

    areasviluppo ha scritto:


    avrei cortesemente necessità di un vostro supporto per risolvere un problema che riguarda l'aggiunta di una colonna all'interno di una tabella di un database.
    La soluzione può variare in base al database di riferimento, e visto che si tratta di una domanda tecnica e specifica riguardo uno di questi e non relativa alla progettazione generale, sarebbe bene indicare il database con cui abbiamo a che fare (oltreché usare l'area relativa in futuro, per questa tipologia di domande). Io do per scontato che si tratti di MySQL.

    areasviluppo ha scritto:


    In pratica avrei la necessità di aggiungere una tabella di questo tipo [...]
    dove nasce il problema ? Avendo un database con oltre 30000 record se eseguissi la query in questo modo, mi ritroverei la colonna data_mod valorizzata alla data odierna anche sugli interventi passati
    Infatti non credo sia opportuno che tu imposti un DEFAULT, o almeno non inizialmente: aggiungi prima la colonna data_mod, fai una UPDATE sulla tabella per settare il valore del campo allo stesso contenuto in data_ins, e successivamente modifica nuovamente la definizione della colonna data_mod aggiungendo il DEFAULT mancante e magari un NOT NULL come rafforzativo (visto che il campo presumibilmente conterrà sempre un valore).

    In questo modo, avrai valori corretti o quantomeno congruenti e l'automatismo del DEFAULT per successivi inserimenti/modifiche.

    areasviluppo ha scritto:


    Aggiungi una colonna data_mod e valorizzala con la data odierna ma invece di mostrare la data_ins mostra una testo "Dato non disponibile". Si può fare una cosa del genere ?
    Stiamo parlando di un campo timestamp: questo può contenere una data/ora, non un testo.
    Quello che vuoi "mostrare" (se si parla di visualizzare qualcosa a video) lo stabilisci a livello applicativo, ad esempio facendo una query e usando un'etichetta simile quando il campo è NULL, ma non esiste ragione né senso nel voler inserire un testo, oltre al fatto che questo rende poco chiaro il collegamento con "data_ins" e quello che vuoi realmente fare.

    Ciao!
  • Re: Aggiungere una colonna tipo timestamp con una condizione

    Ciao,
    anzitutto grazie per la risposta e mi scuso per non aver postato la domanda nella sezione corretta, ad ogni modo ti confermo, come giustamente da te dedotto che il linguaggio in questione è MYSQL. Bene detto questo ritorno al problema ed al perchè avevo impostato la richiesta in questo modo:

    Avendo (come anticipato prima) già tanti record nel database, va da se che dei record antecedenti la data odierna non mi interessa tener traccia di chi ha effettuato l'ultima modica, ma necessito di questa informazione a partire dalla data esatta (timestamp) in cui eseguo la query di aggiunta colonna sul db.

    Quindi ricapitolando, tutti i record che hanno data_ins pari alla data odierna possono mostrare il dato, tutti gli altri antecedenti non dovrebbero mostrare nulla.

  • Re: Aggiungere una colonna tipo timestamp con una condizione

    areasviluppo ha scritto:


    Avendo (come anticipato prima) già tanti record nel database
    Non capisco qual è la correlazione con i presunti "già tanti" record nel database: non è che se ometti il valore per un nuovo campo di questo tipo, risparmi qualcosa.

    Si trattasse di un campo BLOB, con diversi mega di dati, potrei anche capirlo, ma si tratta di un valore data/ora: dal fatto che sia stato aggiunto il campo, scaturisce già una allocazione dello spazio necessario a contenerne il valore (quando presente) da parte del DB in termini fisici.

    Oltre a questo, il numero di record che hai indicato (30000) è tutto fuorché *tanti record*: si vedono tabelle con decine, centinaia di migliaia e anche milioni di record.

    areasviluppo ha scritto:


    va da se che dei record antecedenti la data odierna non mi interessa tener traccia di chi ha effettuato l'ultima modica
    In tal caso, il campo inserito può rimanere NULL, non vedo il problema.

    areasviluppo ha scritto:


    ma necessito di questa informazione a partire dalla data esatta (timestamp) in cui eseguo la query di aggiunta colonna sul db.
    In tal caso, non devi aggiornare nulla sui record esistenti al momento dell'aggiunta del campo.
    Una volta che hai creato il campo, sui nuovi record che andrai a inserire e/o modificare dovrai ricordarti di inserire il valore della data.

    areasviluppo ha scritto:


    Quindi ricapitolando, tutti i record che hanno data_ins pari alla data odierna possono mostrare il dato, tutti gli altri antecedenti non dovrebbero mostrare nulla.
    Ricapitolando, se aggiungi il campo senza forzare il default, tutti i "dati antecedenti" avranno un valore NULL per il nuovo campo. Per i nuovi record che vai a inserire, il dato verrà mostrato in quanto dovrai ricordarti di andare a inserirlo.
    Continuo a non vedere il problema.
  • Re: Aggiungere una colonna tipo timestamp con una condizione

    Ok,
    lascio la query cosi com'è e poi magari tramite codice php, proverò ad inserire un'istruzione che esegua questo compito:

    - se la data_ins è uguale o inferiore al 03/06/2022 ore 17:11, non mostrare il timestamp ma mostra un echo con scritto "Dato non disponibile".

    Grazie mille per il supporto
  • Re: Aggiungere una colonna tipo timestamp con una condizione

    areasviluppo ha scritto:


    lascio la query cosi com'è e poi magari tramite codice php, proverò ad inserire un'istruzione che esegua questo compito [...]
    Lo trovo un accrocchio incredibile e inutilmente preciso del quale, nonostante sia la terza volta che mi sforzo, continuo a non capire il senso, ma visto che non c'è verso di convincerti, se tu sei contento allora siamo a posto così.

    Ciao!
Devi accedere o registrarti per scrivere nel forum
5 risposte