Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481

    select del delta t ordinato [mysql]

    supponiamo di avere una tabella di un db in cui ogni istanza (riga) rappresenta un evento nel tempo in un dato giorno/ora, quindi oltre all'ID dell'evento e ad un campo "descrizione", ho i campi "ora" (di tipo time) e "data" (di tipo date).

    Adesso, partendo dal presupposto che ogni evento termina quando si presenta il successivo, ne deriva che il tempo di esecuzione di ogni evento è la differenza di tempo tra l'evento stesso e quello che lo segue.

    Domande:è possibile strutturare una query che selezioni gli eventi, e la differenza di tempo tra loro e il loro successore? E' meglio usare campi INT e memorizzare il Timestamp o va bene ugualmente utilizzare campi Date e Time? Forse con il Timestamp sarebbe più semplice e appropriato?

    Che ne dite?!

  2. #2
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    Con un campo datetime puoi utilizzare la funzione datediff() di mysql (se hai mysql 4.1.1)

  3. #3
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481
    [supersaibal]Originariamente inviato da VaLvOnAuTa
    Con un campo datetime puoi utilizzare la funzione datediff() di mysql (se hai mysql 4.1.1) [/supersaibal]
    ho la 4.0.18

    Se uso campi int in timestamp ci sono possibilità di successo?

  4. #4
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969
    Timestamp o datetime ha poca differenza.
    Per i calcoli non ci sono problemi, basta trasformare in unix_timestamp e fare la differenza.

  5. #5
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481
    [supersaibal]Originariamente inviato da Teuzzo
    Timestamp o datetime ha poca differenza.
    Per i calcoli non ci sono problemi, basta trasformare in unix_timestamp e fare la differenza. [/supersaibal]
    non so come strutturare la WHERE, mi posti un esempio?? Anche perchè io non voglio selezionare la data/ora, ma proprio la differenza di tempo...

  6. #6
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969
    UNIX_TIMESTAMP(data) ti da il numero di secondi dal 1/1/1970 ...
    Quindi se hai i secondi di due date basta sottrarli per calcolare la differenza di tempo (in secondi).

  7. #7
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481
    [supersaibal]Originariamente inviato da Teuzzo
    UNIX_TIMESTAMP(data) ti da il numero di secondi dal 1/1/1970 ...
    Quindi se hai i secondi di due date basta sottrarli per calcolare la differenza di tempo (in secondi). [/supersaibal]
    SELECT data, UNIX_TIMESTAMP(data)-UNIX_TIMESTAMP(data***) as intervallo
    FROM eventi
    ORDER BY intervallo

    ***come faccio a fare riferimento all'evento successivo nella SELECT?!

  8. #8
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969
    Quello che vuoi attraverso una query non è una cosa semplice, è più semplice se ti calcoli la differenza dopo aver estratto i dati attraverso il php.

    Una query che potrebbe fare al caso tuo è la seguente, però la condizione che funzioni è che ci siano tutti gli id:

    SELECT a.id, a.quellochevuoi, a.data as data1, b.data as data2
    FROM tabella as a
    left join tabella as b
    on a.id=(b.id+1)
    order by (unix_timestamp(data2)-unix_timestamp(data1))

    In pratica fai un left join con la stessa tabella.
    Non l'ho provato, quindi non ti garantisco che funzioni.

  9. #9
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481
    [supersaibal]Originariamente inviato da Teuzzo
    Quello che vuoi attraverso una query non è una cosa semplice, è più semplice se ti calcoli la differenza dopo aver estratto i dati attraverso il php.

    Una query che potrebbe fare al caso tuo è la seguente, però la condizione che funzioni è che ci siano tutti gli id:

    SELECT a.id, a.quellochevuoi, a.data as data1, b.data as data2
    FROM tabella as a
    left join tabella as b
    on a.id=(b.id+1)
    order by (unix_timestamp(data2)-unix_timestamp(data1))

    In pratica fai un left join con la stessa tabella.
    Non l'ho provato, quindi non ti garantisco che funzioni. [/supersaibal]
    con il php è facile, quello che volevo era farlo in SQL, cmq ora è tardi, ma domani provo quello che mi hai postato, e vedo cosa succede, che errori eventualmente da e come risolvere. Per ora grazie

  10. #10
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481
    [supersaibal]Originariamente inviato da Teuzzo
    SELECT a.id, a.quellochevuoi, a.data as data1, b.data as data2
    FROM tabella as a
    left join tabella as b
    on a.id=(b.id+1)
    order by (unix_timestamp(data2)-unix_timestamp(data1))
    [/supersaibal]
    il problema è che gli id non sono consecutivi. In questa tabella ci sono eventi appartenenti ad utenti diversi, quindi c'è anche un campo "user_id", quando io faccio la selezione nella WHERE devo selezionare un solo "user_id"=5. La difficoltà sta nel selezionare l'elemento che ha valore date appena successivo all'elemento corrente...

    Correggimi se sbaglio, ma la cosa forse è risolvibile con una query nidificata, sbaglio?? Una cosa tipo..
    SELECT a.id, a.descrizione, (a.data AS data1-b.data AS data2) AS intervallo
    FROM tabella as a, tabella as b
    WHERE data1<{SELECT MIN(data2) FROM b WHERE data2>data1} AND user_id=5
    ORDER BY data1

    Apparte al fatto che la sintassi sicuramente è sbagliata (le reminescenze scolastiche sono ben lontane), ma poi in mysql non si posso fare query nidificate sbaglio?!

    Come si può fare?? a patto che quello che ho scritto abbia un senso ovviamente.

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