Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    Riconoscere date progressive di un array

    Ciao, ho bisogno di un po d'aiuto sulla logica di come raggruppare dei valori consecutivi (ho già bisogo di ferie ).
    Ho dei dati estratti da un database in cui c'è un id, una data e ora inizio e una data e ora fine. Devo raggruppare i dati che hanno la data ora consecutivi, per esempio i dati sono questi:
    codice:
    $dati[0]['id']=1;
    $dati[0]['inizio']='2021-01-12 08:00:00';
    $dati[0]['fine']='2021-01-12 08:30:00';
    
    $dati[1]['id']=1;
    $dati[1]['inizio']='2021-01-12 11:00:00';
    $dati[1]['fine']='2021-01-12 11:10:00';
    
    $dati[2]['id']=1;
    $dati[2]['inizio']='2021-01-12 08:30:00';
    $dati[2]['fine']='2021-01-12 08:40:00';
    
    $dati[3]['id']=1;
    $dati[3]['inizio']='2021-01-12 10:00:00';
    $dati[3]['fine']='2021-01-12 11:00:00';
    .
    .
    .
    //ci sono altri indici con altri id clienti
    nell'array ho messo un solo id, ma considerate che ci sono molti id e molte più date sparse.
    ho bisogno che l'array diventi così:
    codice:
    $dati[0]['id']=1;
    $dati[0]['inizio']='2021-01-12 08:00:00';
    $dati[0]['fine']='2021-01-12 08:40:00';
    
    $dati[1]['id']=1;
    $dati[1]['inizio']='2021-01-12 10:00:00';
    $dati[1]['fine']='2021-01-12 11:10:00';
    il problema non è il codice, ma l'approccio, come posso identificare le date progressive?

  2. #2
    quando la fine di una è l'inizio dell'altra, a parità di id

    se te li fai ritornare ordinati dal db forse la cosa è più facile
    ARTRIPE

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    141
    Avrebbe più logica se invece di trasformare (quasi certamente il VARCHAR) in DATETIME o similare e possibilità di configurare il timezone su Europe/Rome poiché sicuramente il tuo output è per l'Italia.

    Cioè il Database MYSQL ti offre il tipo di dato per essere ottimizzato o lavorato meglio.
    In sintesi è un RANGE, intervallo tra due date (o più esattamente tra numeri).
    Perché stai usando VARCHAR?

    Ovviamente il fuso orario sarebbe da configurare anche per php se input Italia php uguale Italia.
    Questo per Mysql 8.0 https://dev.mysql.com/doc/refman/8.0/en/datetime.html (chissà se anche in precedenza? solo il manuale precedente potrà confermalo).
    Ultima modifica di darbula; 29-12-2021 a 01:10

  4. #4
    Quote Originariamente inviata da darbula Visualizza il messaggio
    Avrebbe più logica se invece di trasformare (quasi certamente il VARCHAR) in DATETIME o similare e possibilità di configurare il timezone su Europe/Rome poiché sicuramente il tuo output è per l'Italia.

    Cioè il Database MYSQL ti offre il tipo di dato per essere ottimizzato o lavorato meglio.
    In sintesi è un RANGE, intervallo tra due date (o più esattamente tra numeri).
    Perché stai usando VARCHAR?

    Ovviamente il fuso orario sarebbe da configurare anche per php se input Italia php uguale Italia.
    Questo per Mysql 8.0 https://dev.mysql.com/doc/refman/8.0/en/datetime.html (chissà se anche in precedenza? solo il manuale precedente potrà confermalo).
    in MySql non è varchar, ma è proprio DATETIME il campo, quindi mi restituisce un datetime

  5. #5
    Quote Originariamente inviata da optime Visualizza il messaggio
    quando la fine di una è l'inizio dell'altra, a parità di id

    se te li fai ritornare ordinati dal db forse la cosa è più facile
    su MySql come posso controllare la fine di uno a l'inizio del successivo?

  6. #6
    non ho detto di controllare su MySql, ho detto di farti ritornare i record ordinati per data. Posta la query attuale che vediamo
    ARTRIPE

  7. #7
    Quote Originariamente inviata da optime Visualizza il messaggio
    non ho detto di controllare su MySql, ho detto di farti ritornare i record ordinati per data. Posta la query attuale che vediamo
    ok, non avevo capito. La query è difficile da postare, è molto complessa, ci sono molte join, comunque l'ordinamento è giù per data inizio DESC.
    Poi faccio un raggruppamento per cliente, perché il sistema che deve ricevere i dati ha bisogno di averli raggruppati per cliente

  8. #8
    i dati che hai esposto non sembrano ordinati
    codice:
    $dati[0]['inizio']='2021-01-12 08:00:00';
    $dati[1]['inizio']='2021-01-12 11:00:00';
    $dati[2]['inizio']='2021-01-12 08:30:00';
    $dati[3]['inizio']='2021-01-12 10:00:00';
    e poi dovrebbe essere data_inizio ASC per poter capire bene se la data_fine di un record corrisponde alla data_inizio del successivo
    ARTRIPE

  9. #9
    Quote Originariamente inviata da optime Visualizza il messaggio
    i dati che hai esposto non sembrano ordinati
    codice:
    $dati[0]['inizio']='2021-01-12 08:00:00';
    $dati[1]['inizio']='2021-01-12 11:00:00';
    $dati[2]['inizio']='2021-01-12 08:30:00';
    $dati[3]['inizio']='2021-01-12 10:00:00';
    e poi dovrebbe essere data_inizio ASC per poter capire bene se la data_fine di un record corrisponde alla data_inizio del successivo
    i dati non sono ordinati, perché quando li raggruppo per cliente (con indice numerico progressivo), faccio delle operazioni e capita che non sono ordinati, non è necessario che siano restituiti ordinati. Quello che interessa a me è creare un indice per id che ha le date progressive. Uno stesso id potrebbe avere 6 date inizio, 4 di queste sono continuative tra data inizio e data fine, le altre 2 no, ma lo sono tra di loro. Io devo creare un array che ha 2 indici, uno di un gruppo e uno di un'altro.

    Immagina di avere 10 appuntamenti al giorno (identificati con data e ora) per un determianto cliente, 5 di questi sono in ordine dalle 8.00 alle 10.00 e 5 sono in ordine dalle 18.00 alle 23.00, io devo avere un array con 2 indici, uno con data inizio 8.00 e data fine 10.00 e l'altro indice 18.00 con data fine 23.00

  10. #10
    se non sono in ordine è difficile abbinarli semplicemente scorrendoli. Capisco che li ordini in un modo diverso prima di caricarli nell'array, ma allora ordinali dopo. Non vedo altre strade, magari altri forumisti hanno altre soluzioni
    ARTRIPE

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 © 2022 vBulletin Solutions, Inc. All rights reserved.