Ciao a tutti,
all'aggiunta di ogni nuovo record nel db devo generare un corrispondente ID annuale e ID giornaliero. Qualcuno può consigliarmi anche concettualmente una soluzione affidabile? Grazie
Ciao a tutti,
all'aggiunta di ogni nuovo record nel db devo generare un corrispondente ID annuale e ID giornaliero. Qualcuno può consigliarmi anche concettualmente una soluzione affidabile? Grazie
Spiega un po' meglio come deve funzionare la cosa, che intendi per "calcolo"? C'è una regola con cui devono essere generati questi codici? Tipo un codice sequenziale oppure una stringa del tutto casuale ma unica?
Giusto, scusami.. Non devono essere altro che due numeri progressivi che si azzerano ogni giorno e ogni anno.
Esempio:
ID ann. | ID giorn. | Data
1 | 1 | 02-01-2018
2 | 2 | 02-01-2018
3 | 3 | 02-01-2018
4 | 1 | 03-01-2018
5 | 2 | 03-01-2018
1 | 1 | 10-09-2019
2 | 2 | 10-09-2019
3 | 1 | 11-09-2019
4 | 2 | 11-09-2019
...
Ho calcolato l'ID annuale così.. Pensate sia affidabile?
codice:$qry = "SELECT MAX(id_annuale) id_annuale FROM elenco WHERE YEAR(data) = YEAR(CURDATE())"; $query = $connessione -> prepare ($qry); $query -> execute(); $r = $query->fetch(); if($r['id_annuale'] != 1){ $id_annuale = '1'; } else { $id_annuale = $r['id_annuale'] + 1; } return $id_annuale;
Ultima modifica di magic_key; 05-02-2018 a 11:13
Così non andrai mai oltre 2 come id.
Hai scritto:
se l'id è diverso da 1 (quindi per esempio 2) impostalo a 1
altrimenti ( quindi se è pari a 1) incrementa di 1 (e diventa 2)
quindi la tua sequenza di id sarà
1 (incrementa) -> 2 (imposta 1) -> 1 (incrementa) -> 2 (imposta 1) -> 1...
La decisione se incrementare o no devi farla sull'anno.
Inoltre devi anche considerare il caso in cui sia il primo inserimento dell'anno, in tal caso non hai ancora nessun id per l'anno, quindi la query restituirà il resultset vuoto e $r['id_annuale'] ti darà l'errore undefined index.
Prima di tutto devi verificare se la query ha pescato qualcosa o no, il caso "no" è appunto se si tratta del primo inserimento.
Ultima modifica di Alhazred; 05-02-2018 a 12:18
Ho levato le condizioni; ho fatto dei test e sembra andar meglio. Può andare così?
codice:$qry = "SELECT MAX(id_annuale) id_annuale FROM chiamate WHERE YEAR(data_evento) = YEAR(CURDATE())"; $query = $connessione -> prepare ($qry); $query -> execute(); $r = $query->fetch(); return $r['id_annuale'] + 1;
Non hai risolto il problema del primo inserimento dell'anno.
Inoltre, concettualmente la tua soluzione è esposta al rischio che inserimenti pressoché contemporanei finiscano per generare lo stesso id, se non usi blocchi sulle tabelle