Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it L'avatar di thitan
    Registrato dal
    Feb 2001
    Messaggi
    716

    trovare un 'buco' in una sequenza numerica

    ciao, se ho ad esempio una tabella

    |id|testo|num|

    e ho inserito i dati

    |1|ciao|1|
    |2|salut|2|
    |3|bho|3|
    ecc..


    ora, io ho bisogno che quando provo a inserire una nuova riga mi suggerisca il num più basso disponibile, e avevo risolto con

    list($num)=mysql_fetch_array(mysql_query("SELECT num FROM tabella ORDER BY num DESC LIMIT 1"));

    e funziona, ma se uno mi elimina il record 2, ho bisogno che inserendo una nuova riga mi suggerisca num=2, invece con quella query mi restituisce 4!

    in poche parole non devono esserci 'buchi' nella sequenza del campo num..

    idee?

    www.inter-rail.it
    travellers, not tourist
    Is cuma cá mhinice a théann tú ar strae; is é is tábhachtaí gurb áil leat do bhealach a aimsiú arís.

  2. #2
    Utente di HTML.it L'avatar di thitan
    Registrato dal
    Feb 2001
    Messaggi
    716
    up

    www.inter-rail.it
    travellers, not tourist
    Is cuma cá mhinice a théann tú ar strae; is é is tábhachtaí gurb áil leat do bhealach a aimsiú arís.

  3. #3
    Utente di HTML.it L'avatar di thitan
    Registrato dal
    Feb 2001
    Messaggi
    716
    uppete

    dai ragazzi nessuno sa niente?

    dovrebbe essere una roba del tipo "SELECT MIN(num) WHERE non esiste num+1 ma esiste num > num+1"

    www.inter-rail.it
    travellers, not tourist
    Is cuma cá mhinice a théann tú ar strae; is é is tábhachtaí gurb áil leat do bhealach a aimsiú arís.

  4. #4
    Ciao.
    Io + ke fare un select, penserai ad un approccio diverso.
    Ogni qualvolta cancelli una riga della tua tabella prendi l'id eliminato e te lo conservi da qualche parte, semmai in una tabella tipo ricorda_num.
    Quando, poi, devi inserire una nuova riga:

    Se nella tabella ricorda_num c'è qualcosa prendi l'id da lì
    Altrimenti prendi MAX(id) dalla tua tabella (dove devi fare l'inserimento) è il prossimo id sarà MAX(id)+1.

  5. #5
    Utente di HTML.it L'avatar di thitan
    Registrato dal
    Feb 2001
    Messaggi
    716
    mmh, l'idea della tabella che 'ricorda' i valori eliminati è valida...

    però l'id e il num saranno due cose completamente diverse, per motivi di procedura.

    potrei provare a salvare il num che elimino nella tabella, e già li sò per esclusione che ho il 'buco', e quanti ne ho..

    e ogni volta che vado a inserire un nuovo record, invece di suggerire il num + alto libero, se ci sono record nella tabella 'ricorda' suggerisco il 'buco' più basso, e se viene utilizzato elimino poi il record da 'ricorda'..

    si si strutturato a modo potrebbe funzionare, ammetto di non averci neanche pensato!!


    grazie!

    www.inter-rail.it
    travellers, not tourist
    Is cuma cá mhinice a théann tú ar strae; is é is tábhachtaí gurb áil leat do bhealach a aimsiú arís.

  6. #6
    anche meglio se tu aggiungessi un campo 0/1 per definire il valore record valido o eliminato. Poi cerchi il primo record con valore eliminato = 0 e leggi il num da applicare. Puoi anche fare un solo update invece di un insert. in pratica non cancelli ma aggiorni il campo valido a 1 o 0

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

  7. #7
    Originariamente inviato da piero.mac
    anche meglio se tu aggiungessi un campo 0/1 per definire il valore record valido o eliminato. Poi cerchi il primo record con valore eliminato = 0 e leggi il num da applicare. Puoi anche fare un solo update invece di un insert. in pratica non cancelli ma aggiorni il campo valido a 1 o 0
    Si, in effetti questo metodo è + veloce, resta solo da capire la quantità di informazioni o meglio di righe che vengono eliminate e di righe totali della tabella. Se tale numero è molto elevato allora non conviene tenere dati inutili nella tabella anche perché poi query tipo select risulterebbero appesantite; in caso contrario sicuramente il metodo da te proposto è + semplice e veloce da utilizzare.

  8. #8
    Utente di HTML.it L'avatar di thitan
    Registrato dal
    Feb 2001
    Messaggi
    716
    Originariamente inviato da piero.mac
    anche meglio se tu aggiungessi un campo 0/1 per definire il valore record valido o eliminato. Poi cerchi il primo record con valore eliminato = 0 e leggi il num da applicare. Puoi anche fare un solo update invece di un insert. in pratica non cancelli ma aggiorni il campo valido a 1 o 0
    questo lo utilizzo già, ma in modo diverso: 1 = valido, 0 = nel cestino
    e quando i record 'sono nel cestino', vengono completamente ignorati da tutto il sistema, e se vengono ripristinati dal cestino, una procedura semiautomatica chiederà all'utente

    'C'è un buco, capperi! vuoi usare un numero incrementale nuovo, o mi 'copri' uno di questi buchi?'

    nel momento in cui l'utente decide di eliminare definitivamente un record, lo elimino dal database
    tuttavia se il num 10 è nel cestino, il nuovo record dovrà avere num = 10
    il problema si pone nel momento in cui, avendo ad es 10 num, uno mi elimina definitivamente il record con num = 4.

    www.inter-rail.it
    travellers, not tourist
    Is cuma cá mhinice a théann tú ar strae; is é is tábhachtaí gurb áil leat do bhealach a aimsiú arís.

  9. #9
    Potresti usare 0 = nel cestino, 1 = valido, 2 = eliminato

    Così se l'utente ti dice di coprire uno dei buchi prendi quello + piccolo che hanno i flag 0 o 2. Oppure l'utente sa quali record sono stati cancellati e quali no?

    Comunque per poterti dare una mano dovresti farci capire un attimino di cosa stiamo parlando, altrimenti facciamo solo delle supposizioni che possono rivelarsi inutili.

  10. #10
    Utente di HTML.it L'avatar di thitan
    Registrato dal
    Feb 2001
    Messaggi
    716
    Originariamente inviato da gianf_tarantino
    Potresti usare 0 = nel cestino, 1 = valido, 2 = eliminato

    Così se l'utente ti dice di coprire uno dei buchi prendi quello + piccolo che hanno i flag 0 o 2. Oppure l'utente sa quali record sono stati cancellati e quali no?

    Comunque per poterti dare una mano dovresti farci capire un attimino di cosa stiamo parlando, altrimenti facciamo solo delle supposizioni che possono rivelarsi inutili.
    semplice, fatturazione.

    non può esserci un buco nel numero delle fatture, e la numerazione deve rispettare anche la data della fattura.

    se la fattura 10 è del 19/09/2007, la fattura 12 non può evere data 15/09/2007.

    nel momento in cui l'utente mi sposta una fattura nel cestino, quella verrà completamente ignorata dal sistema, come se non fosse mai esistita; resterà solo come remind nel caso in cui l'uutente si accroge di averla eliminata per sbaglio... e nel caso in cui la ripristini, data fattura e numero cambieranno.

    poi starà all'utente ordinarsi numeri e date, io devo solo avvertirlo in caso di 'buchi' nella fatturazione!

    www.inter-rail.it
    travellers, not tourist
    Is cuma cá mhinice a théann tú ar strae; is é is tábhachtaí gurb áil leat do bhealach a aimsiú arís.

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