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

    codice prodotto con contatore

    Ciao a tutti avrei necessità da CMS per il cliente di creare un cmpo che assegni ad ogni prodotto un codice composto da anno in 4 cifre (e sin qui ok) seguito da numero progressivo a due cifre.

    Come posso far sì che nel momento in cui inserisco il prodotto in mysql il codice assegnato sia di questo tipo?

    Grazie

  2. #2
    Utente di HTML.it L'avatar di strae
    Registrato dal
    Apr 2008
    Messaggi
    407
    [OT] ma sei di montecchio emilia? [/OT]

    'nyway, dando per scontato che il codice numerico deve essere unico (unico per mese? anno? avrai solo 99 prodotti all'anno?)

    ti basta prendere l'anno che già hai, e fare una select dei valori.. poi li conti, e ottieni il numero+1


    esempio:
    Codice PHP:
    $y date("Y");
    //quel where và poi adattato alle tue esigenze, cioè in base a cosa assegni il codice di due cifre, ecc...
    $p mysql_query("SELECT COUNT(id) FROM nome_tabella WHERE codice LIKE '$y%' ");
    $n mysql_num_rows($p);
    $n++;
    //ora non ti resta che controllare se $n è a 2 cifre, o se è a una cifra aggiungi uno zero
    if(strlen($n) < 2){ $n '0'.$n; } 
    You HAVE to assume your visitor is a maniac serial killer, out to destroy your application. And you have to prevent it.
    I can accept failure, everyone fails at something - But I can't accept not trying.

  3. #3
    ciao Strae, no non sono di Montecchio...sto dalle parti di Milano (e in questo periodo non è un vantaggio!).

    Grazie per il tuo consiglio ma ci vedo una pecca...e se cancellano un prodotto?

    Ipotesi: siamo a 98, e il nuovo prodotto prende l'id 200899, poi però cancellano il 200833 e il nuovo inserito sarà ancora 200899!!

    mi sa che non è praticabile! Hai altre idee?

    grazie per il tuo aiuto!

  4. #4
    Utente di HTML.it L'avatar di strae
    Registrato dal
    Apr 2008
    Messaggi
    407
    Originariamente inviato da brucomela
    ciao Strae, no non sono di Montecchio...sto dalle parti di Milano (e in questo periodo non è un vantaggio!).

    Grazie per il tuo consiglio ma ci vedo una pecca...e se cancellano un prodotto?

    Ipotesi: siamo a 98, e il nuovo prodotto prende l'id 200899, poi però cancellano il 200833 e il nuovo inserito sarà ancora 200899!!

    mi sa che non è praticabile! Hai altre idee?

    grazie per il tuo aiuto!

    ...apparte il fatto che non ho mai detto di usare il codice anno+2 cifre come ID della riga, dipende dall'utilizzo che devi poi fare di quel codice.

    se vuoi che la fila sia sempre rispettata, senza 'buchi' nella stampa, allora non mettelro nemmeno a database: ci metti solo l'anno e poi il num a 2 cifre lo stampi solo..

    però non ha senso, se io inserisco il prodotto 200845, e cancello il 200825, in numero 200845 deve restare tale, se no se cambiano sempre che senso ha un codice scusa? cmq vabbè dipende dal tipo di uso che ne fai...
    You HAVE to assume your visitor is a maniac serial killer, out to destroy your application. And you have to prevent it.
    I can accept failure, everyone fails at something - But I can't accept not trying.

  5. #5
    scusa se ho scritto id della riga, intendevo codice identificativo del prodotto (non è la chiave della tabella).

    Però il problema rimane, non è il problema che il prodotto 200899 scala di uno se ne cancello uno precedentemente creato (quel codice non cambierà, se no che codice identificativo sarebbe!), il problema invece è che quando cancello il 200833, i record da 99 tornano a essere 98, e con il tuo metodo il nuovo inserito avrà ancora codice identificativo 200899 (che esiste già).

    In pratica il conteggio dei record non è affidabile perchè genera facilmente dei duplicati (se capisco male correggimi!)

  6. #6
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    E se invece che il COUNT usassi il MAX?

    Una cosa tipo
    SELECT MAX(codice_prodotto) FROM nome_tabella WHERE codice LIKE '$y%' GROUP BY codice_prodotto

    Non capisco come faresti a gestire più di 100 prodotti...

  7. #7
    Utente di HTML.it L'avatar di strae
    Registrato dal
    Apr 2008
    Messaggi
    407
    Originariamente inviato da brucomela
    scusa se ho scritto id della riga, intendevo codice identificativo del prodotto (non è la chiave della tabella).

    Però il problema rimane, non è il problema che il prodotto 200899 scala di uno se ne cancello uno precedentemente creato (quel codice non cambierà, se no che codice identificativo sarebbe!), il problema invece è che quando cancello il 200833, i record da 99 tornano a essere 98, e con il tuo metodo il nuovo inserito avrà ancora codice identificativo 200899 (che esiste già).

    In pratica il conteggio dei record non è affidabile perchè genera facilmente dei duplicati (se capisco male correggimi!)

    ahhhhh ok, ho frainteso io, hai ragione te...
    Codice PHP:
    $q mysql_query("SELECT MAX(codice) FROM nome_tabella WHERE codice LIKE '$anno%' GROUP BY id");
    list(
    $codice)=mysql_fetch_array($q);
    $codice++;
    //poi fai tutti i controlli del caso.. 
    You HAVE to assume your visitor is a maniac serial killer, out to destroy your application. And you have to prevent it.
    I can accept failure, everyone fails at something - But I can't accept not trying.

  8. #8
    strae e clasku: grandi...ci sono arrivato anch'io nel frattempo!

    Circa il numero dei prodotti questo era solo un esempio, in base alle previsioni del cliente per anno valuteremo quante cifre inserire...

    Grazie ++!

  9. #9
    Utente di HTML.it L'avatar di strae
    Registrato dal
    Apr 2008
    Messaggi
    407
    ultimo consiglio, avendo avuto anche io a che fare con un problema del genere:
    metti una lettera in mezzo.

    cioè:
    2008a01
    2008a02
    2008a03
    2008a04
    ...
    2008b01

    moltiplica un sacco il numero potenziale

    per intenderci, io usavo una roba del tipo (per dei codici ordinazioni):
    080630a10
    (2 cifre anno)+(2 cifre mese)+(2 cifre giorno)+(lettera)+(numero da 00 a 99)
    You HAVE to assume your visitor is a maniac serial killer, out to destroy your application. And you have to prevent it.
    I can accept failure, everyone fails at something - But I can't accept not trying.

  10. #10
    grazie del consiglio strae, se al cliente va bene lo applico!

    Mi sta sorgendo un altro problema però, supponiamo che siamo al codice:

    080001 (anno di due cifre e 4 cifre per il contatore ok)

    il successivo sarà 080002, ma php mi sta creando problemi quando lo incremento: se lo uso come numero mi toglie lo zero iniziale, se lo uso come stringa non mi fa la somma...sembrerà una domanda scema (e lo è!) ma come gli faccio fare l'incremento?!!

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.