Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Calcolo ID annuale e ID giornaliero

    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

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    11,982
    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?

  3. #3
    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
    ...

  4. #4
    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

  5. #5
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    11,982
    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

  6. #6
    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;

  7. #7
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,135
    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

  8. #8
    Quote Originariamente inviata da luca200 Visualizza il messaggio
    Non hai risolto il problema del primo inserimento dell'anno.
    Al primo inserimento calcola: null + 1 = 1

    Qualche consiglio su come posso perfezionare il tutto?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.