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

    [sql] Meglio campo date o meglio campi separati?

    Le solite seghe mentali sulle prestazioni.

    Ipotizziamo di avere dei dati in una tabella, e questi dati devo poterli reperire per ANNO di inserimento, oppure per MESE
    +ANNO oppure per SETTIMANA+MESE+ANNO oppure per GIORNO+MESE+ANNO.
    Ecco, che voi sappiate, in termini di prestazioni, quale soluzione è preferibile tra queste due?

    1) memorizzare la data in un campo unico di tipo DATE e nelle query fare i calcoli su questo campo per estrarre solo i dati necessari
    2) memorizza GIORNO,SETTIMANA,MESE,ANNO in campi diversi e nella query fare semplicemente delle concatenazioni nel WHERE.

    Grazie

  2. #2

    Re: [sql] Meglio campo date o meglio campi separati?

    [supersaibal]Originariamente inviato da skidx
    Le solite seghe mentali sulle prestazioni.

    Ipotizziamo di avere dei dati in una tabella, e questi dati devo poterli reperire per ANNO di inserimento, oppure per MESE
    +ANNO oppure per SETTIMANA+MESE+ANNO oppure per GIORNO+MESE+ANNO.
    Ecco, che voi sappiate, in termini di prestazioni, quale soluzione è preferibile tra queste due?

    1) memorizzare la data in un campo unico di tipo DATE e nelle query fare i calcoli su questo campo per estrarre solo i dati necessari
    2) memorizza GIORNO,SETTIMANA,MESE,ANNO in campi diversi e nella query fare semplicemente delle concatenazioni nel WHERE.

    Grazie [/supersaibal]
    La 1)

    Un campo contro 4-5, semplicita' di ordinamento, tutte le funzioni temporali disponibili.
    Non ti devi complicare lo script per facilitare mysql. Devi semplificare lo script sfruttando le peculiarita' delle funzioni, altrimenti tanto vale tornare all'assembler.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3

    Re: Re: [sql] Meglio campo date o meglio campi separati?

    [supersaibal]Originariamente inviato da piero.mac
    La 1)

    Un campo contro 4-5, semplicita' di ordinamento, tutte le funzioni temporali disponibili.
    Non ti devi complicare lo script per facilitare mysql. Devi semplificare lo script sfruttando le peculiarita' delle funzioni, altrimenti tanto vale tornare all'assembler.

    [/supersaibal]
    ma lo script con l'ipotesi 2 non mi si complicherebbe affatto, per avere la data completa è sufficiente concatenare i vari campi (una scemenza), mentre ad esempio estrarre i dati di una specifica settimana dell'anno, lo vedrei più difficile con un campo di tipo date, non trovi?

  4. #4

    Re: Re: Re: [sql] Meglio campo date o meglio campi separati?

    [supersaibal]Originariamente inviato da skidx
    ma lo script con l'ipotesi 2 non mi si complicherebbe affatto, per avere la data completa è sufficiente concatenare i vari campi (una scemenza), mentre ad esempio estrarre i dati di una specifica settimana dell'anno, lo vedrei più difficile con un campo di tipo date, non trovi? [/supersaibal]
    Non direi, fai un esempio...

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5

    Re: Re: Re: Re: [sql] Meglio campo date o meglio campi separati?

    [supersaibal]Originariamente inviato da piero.mac
    Non direi, fai un esempio... [/supersaibal]
    nel senso, supponiamo che io voglia i dati della quindicesima settimana dell'anno X. Un campo date se non ricordo male è fatto così AAAAMMGG, dovrei quindi fare dei calcoli ad ogni richiesta per ottenere i margini della settimana 15 in termini di GIORNO E MESE.

    Avendo invece un campo SETTIMANA con valore 15 la query sarebbe una vera scemenza, e il calcolo per determinare il numero 15 dovrei farlo solo una volta, nell'inserimento, invece che ogni volta nella lettura.

  6. #6

    Re: Re: Re: Re: Re: [sql] Meglio campo date o meglio campi separati?

    [supersaibal]Originariamente inviato da skidx
    nel senso, supponiamo che io voglia i dati della quindicesima settimana dell'anno X. Un campo date se non ricordo male è fatto così AAAAMMGG, dovrei quindi fare dei calcoli ad ogni richiesta per ottenere i margini della settimana 15 in termini di GIORNO E MESE.

    Avendo invece un campo SETTIMANA con valore 15 la query sarebbe una vera scemenza, e il calcolo per determinare il numero 15 dovrei farlo solo una volta, nell'inserimento, invece che ogni volta nella lettura. [/supersaibal]
    Ma perche'? Trovo che sia sicuramente piu' semplice il seguente..

    WHERE WEEK(campo_data) = 15

    tra l'altro la storia della settimana dell'anno e' tortuosa. Infatti nella versione 4.1 di mysql c'e' una terza funzione in merito.

    Ora sono: WEEK, WEEKOFYEAR e YEARWEEK

    il problema non e' di mysql ma di come vengono contate le settimane a partire dall'inizio dell'anno. chi inizia di domenica, chi di lunedi', che conta 1-53, chi da 0-52. Dipende da che parte del mondo ti trovi. Quella che ti ho messo (WEEK) ha un secondo parametro 0/1 per dire se la settimana inizia di domenica oppure lunedi', se le settimane sono 0-53 oppure 1-52.
    Ti allego la descrizione
    WEEK (date[,mode])
    The function returns the week number for date. The two-argument form
    of WEEK () allows you to specify whether the week starts on Sunday or
    Monday and whether the return value should be in the range from 0 to
    53 or from 1 to 53. If the mode argument is
    omitted, the value of the default_week_format system variable is
    used (or 0 before MySQL 4.0.14).
    See also : [Server system variables].

    The following table describes how the mode argument works:

    First day
    Mode of week Range Week 1 is the first week...
    0 Sunday 0-53 with a Sunday in this year
    1 Monday 0-53 with more than 3 days this year
    2 Sunday 1-53 with a Sunday in this year
    3 Monday 1-53 with more than 3 days this year
    4 Sunday 0-53 with more than 3 days this year
    5 Monday 0-53 with a Monday in this year
    6 Sunday 1-53 with more than 3 days this year
    7 Monday 1-53 with a Monday in this year


    A mode value of 3 can be used as of MySQL 4.0.5.
    Values of 4 and above can be used as of MySQL 4.0.17.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Dimenticavo la cosa piu' importante.... con il frazionamento dei dati ti trovi con colonne in piu' e con dati duplicati inutilmente.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    non conoscevo queste funzioni dell'sql, in questo caso è sicuramente preferibile la prima ipotesi (campo unico).
    grazie 1000

  9. #9
    [supersaibal]Originariamente inviato da skidx
    non conoscevo queste funzioni dell'sql, in questo caso è sicuramente preferibile la prima ipotesi (campo unico).
    grazie 1000 [/supersaibal]
    Lo menata un po sul WEEK, ma di fatto mysql e' quello che ha piu' funzioni sui dati temporali. Direi anche troppe... sono 60.

    Se hai mysql 4.1.8 o superiore vai nel db mysql e sparati questa query. Se versione prec. l'id e' 15 invece di 14.
    codice:
    SELECT a.name AS categoria
    FROM `help_topic` a
    LEFT JOIN `help_category` c
    ON a.help_category_id = c.help_category_id
    WHERE c.help_category_id = 14
    ORDER BY a.name
    Mi sono fatto uno scriptino che mi legge gli help che si trovano la. Se potesse interessare a qualcuno potrei metterlo giu' a mo' di pilloletta. Poi andr3a fara' una classe.



    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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.