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

    MySql campo numerico progressivo con clausola


    Sto cercando di capire se MySql gestisce in autonomia sta cosa:

    campo NUMERO_ORDINE / campo ANNO_ORDINE

    numero ordine deve essere un auto incrementante univoco per l'anno in corso, per cui
    ------------------------------
    1 <--- 2012
    2 <--- 2012
    3 <--- 2012
    4 <--- 2012
    ------------------------------
    1 <--- 2013
    2 <--- 2013
    3 <--- 2013
    4 <--- 2013
    ------------------------------
    Da codice saprei come gestirlo ma la mia domanda è ...mysql può all'inserimento di 1 record automatizzare sti 2 campi?
    ...chiedo troppo?
    Tanto...lo fanno tutti... posso farlo anche io vero?

  2. #2
    Per prima cosa fai una tabella degli ordini con tutti i campi che ti servono. Al campo NUMERO_ORDINE metti SMALLINT e Auto Increment. Al campo ANNO_ORDINE metti come predefinito 2012 o l'anno che vuoi. Quando aggiungi un record non mettere nulla nell'anno e automaticamente metterà 2012. Ecco un esempio:
    Creiamo la tabella:
    Codice PHP:
    CREATE TABLE IF NOT EXISTS `Ordini` (   `NUMERO_ORDINEsmallint(6NOT NULL AUTO_INCREMENT,   `ANNO_ORDINEsmallint(6NOT NULL DEFAULT '2012',   PRIMARY KEY (`NUMERO_ORDINE`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=
    E ogni volta che aggiungi un record aggiungi tutto quello che vuoi tranne che ANNO_ORDINE E NUMERO ORDINE.

  3. #3
    ipc
    Grazie davvero per la risposta, e direi metodo interessante, c'è però il problema per l'anno che di default è 2012 mentre io vorrei l'anno in corso per cui quando scatterà il 2013 (salvo previsioni maya) mi toccherebbe cambiarlo, cmq grazie ancora.

    Nel mentre ho risolto con uno script di controllo sulla insert, la mia domanda era per capire se potevo automatizzare al 100% la cosa.

    sei stato gentilissimo!!!
    Tanto...lo fanno tutti... posso farlo anche io vero?

  4. #4
    Quello che chiede lui è un po diverso.

    fai cosi (ad esempio):

    CREATE TABLE `tabella` (
    `anno` int(4) NOT NULL,
    `id` int(11) NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (`anno`,`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;


    INSERT INTO `tabella` (
    `anno`
    )
    VALUES (
    '2012'
    );

    L'id è auto increment, e quando cambi l'anno, riparte da 1
    Ciao!

  5. #5
    quando inserisci un record nella data metti
    Codice PHP:
    $date date("o"); 
    e poi '.$date.'

  6. #6
    INSERT INTO `tabella`
    (
    `anno`
    ) VALUES (
    NOW()
    )
    Ciao!

  7. #7
    fmortara
    Domanda
    come fa l'id essendo chiave primaria a ripartire da 1 quando cambia l'anno?
    esempio se io ho

    1 / 2012
    2 / 2012

    come posso avere ancora una chiave a 1 anche se l'anno è diverso?
    poi utilizzando l'id c'è il problema degli indici ovvero se cancello l'id 5 non avrò + l'id 5 mentre postgresql a differenze (essendo l'indice gestito in modo diverso con una sequence_number non crea ma buchi)
    Tanto...lo fanno tutti... posso farlo anche io vero?

  8. #8
    Originariamente inviato da ipc
    quando inserisci un record nella data metti
    Codice PHP:
    $date date("o"); 
    e poi '.$date.'
    Grazie IPC , cmq il mio non è un problema di codice...anzi...

    era + una domanda sulle potenzialità di MySql era per cui un post + rivolto al database stesso, a livello di codice, come dicevo, l'ho già fatto testato e funzionante


    Sto cercando di sfruttare MySql al meglio e tutte le sue automazioni

    cmq grazie a tutti
    Tanto...lo fanno tutti... posso farlo anche io vero?

  9. #9
    guarda bene...
    la chiave primaria non è l'id, ma è composta da anno e id..
    per cui

    anno, id
    2012,1
    2012,2
    2012,3
    2012,4
    2012,5
    2013,1
    2013,2
    2013,3
    2013,4
    2013,5
    ecc...

    se vuoi inserire l'anno corrente usa now() per inserire il campo, come ti ho detto nel post precedente:

    ti ricopio:

    Crei la tabella:
    CREATE TABLE `tabella` (
    `anno` int(4) NOT NULL,
    `id` int(11) NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (`anno`,`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;

    Esegui l'insert:

    INSERT INTO `tabella` (
    `anno`
    )
    VALUES (
    NOW()
    );

    L'anno è quello corrente del server, l'id è auto increment, ma se cambia l'anno l'id riparte da 1.
    ovviamente puoi inserire valori personalizzati se cancelli un valore es 2012,2 lo puoi inserire con una query assegnando manualmente i valori.

    prova con phpmyadmin...
    Ciao!

  10. #10
    oooppss scusa fmortara non avevo letto bene per la chiave che era composta da anno+id ... e anche il tuo metodo è molto valido e grazie per le indicazioni.

    Mi pare di capire che IO non mi sono però spiegato bene, e per questo vi chiedo scusa...

    L'automazione che cercavo non era da mettere in 1 query di insert o update etc..

    volevo sapere se oltre al "risotto" MySql ha modo di automatizzare e valorizzare alcuni campi secondo una certa logica... per "automazione" intendo una cosa tipo un campo:
    ------------------------------------------------------------
    TIMESTAMP defalut value --> CURRENT_TIMESTAMP
    dive se inserisco (es...
    insert into tab(nome) values('aaaaa');
    ------------------------------------------------------------
    Mysql OLTRE al nome (dato dalla insert da query) valorizza anche il campo datains con
    2011-12-16 12:12:33 (esempio)
    ------------------------------------------------------------

    Io cercavo questo concetto di automazione per cui campi esclusi dalla query e gestiti con una certa logica da MySql....


    Grazie CMQ i vostri suggerimenti sono stati molto apprezzati!
    Tanto...lo fanno tutti... posso farlo anche io vero?

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.