Winning Eleven Italia - Forum

Torna indietro   Winning Eleven Italia - Forum > Extra > Tech Laboratory
Portale Forum Registrati Top Posters FAQ Lista utenti Calendario Segna i forums come letti IRC Chat


rispondi
 
Strumenti discussione Modalità di visualizzazione
Vecchio 03-08-2008, 20:27   #1
Geggio
Faccio piaceri a Limps
 
L'Avatar di Geggio
 
Data Iscrizione: 03-08-2002
Età: 22
Messaggi: 12.310
Potenza rep: 54 Geggio ha disabilitato la reputazione
[SQL] Numero non conseguente

diciamo ke io ho una tabella col campo IDNOME coi seguenti valori

1
2
4
5
6

io vorrei una query SQL ke mi faccia uscire il numero 3 ( visto ke manca dall'elenco quindi è un "buco") e se nn ci sta nessun "buco" mi metta il numero 7




p.s. scusate il mio linguaggio, ma fa caldo e sto a magnare/bere pringles e birra
__________________
...
Geggio non è collegato   Rispondi Citando
Vecchio 03-08-2008, 22:50   #2
Felice R.
masini addicted
 
L'Avatar di Felice R.
 
Data Iscrizione: 24-08-2004
Residenza: Milano
Età: 24
Messaggi: 3.485
Potenza rep: 20 Felice R. ha disabilitato la reputazione
premesso che mi puzza di stronzata e che mi piacerebbe sapere il motivo per cui non devi avere buchi visto che e' solo un id ed e' sempre pericoloso riutilizzarne uno vecchio, la prima cosa che mi viene in mente e'

Codice:
SELECT MIN(p.idnome+1) 
  FROM tabella p 
 WHERE NOT EXISTS(SELECT 1 
                    FROM tabella c 
                   WHERE c.idnome=p.idnome+1)
N.B. Se il buco e' all'inizio (manca l'1, o mancano 1 e 2, ecc.) la query non funge (non ti da 1). Potresti fare lo stesso ragionamento usando -1 invece che +1, ma se c'e' un buco di 2 (ad esempio mancano 3 e 4), ti resituirebbe il piu' grande dei due (4 e non 3).
__________________
Felice R. è collegato   Rispondi Citando
Vecchio 03-08-2008, 22:57   #3
rioka
Capo Ultrà
 
L'Avatar di rioka
 
Data Iscrizione: 08-10-2003
Residenza: tv
Messaggi: 228
Potenza rep: 11 rioka ha Reputazione Nulla --> Liv. 0
Lightbulb

Tempo fa avevo salvato questo link; prova a controllare se ti puo' aiutare...
rioka non è collegato   Rispondi Citando
Vecchio 03-08-2008, 23:09   #4
Derfel
sukermod
 
L'Avatar di Derfel
 
Data Iscrizione: 30-04-2002
Residenza: Roma
Messaggi: 9.225
Potenza rep: 50 Derfel ha disabilitato la reputazione
Secondo me ti è più utile questo di link
__________________
Derfel non è collegato   Rispondi Citando
Vecchio 03-08-2008, 23:25   #5
Felice R.
masini addicted
 
L'Avatar di Felice R.
 
Data Iscrizione: 24-08-2004
Residenza: Milano
Età: 24
Messaggi: 3.485
Potenza rep: 20 Felice R. ha disabilitato la reputazione
con questa query si risolve anche il problema quando mancano i primi id (si suppone che gli id partano da 1):

Codice:
SELECT MIN(temp.id)
  FROM(
        SELECT p.idnome+1 id
          FROM tabella p 
         WHERE NOT EXISTS(SELECT 1 
                            FROM tabella c 
                           WHERE c.idnome=p.idnome+1)
        UNION ALL
        SELECT MIN(p.idnome-1) id
          FROM tabella p 
         WHERE p.idnome > 1
           AND NOT EXISTS(SELECT 1 
                            FROM tabella c 
                           WHERE c.idnome=p.idnome-1)
      ) temp
EDIT: merda pero' se mancano 1 e 2 ti da comunque 2
__________________
Felice R. è collegato   Rispondi Citando
Vecchio 04-08-2008, 01:25   #6
Zanna
Re di WE
 
L'Avatar di Zanna
 
Data Iscrizione: 01-01-1970
Messaggi: 10.571
Potenza rep: 0 Zanna ha disabilitato la reputazione
Non c'è un solo motivo valido per cui tu debba dover usare un ID già usato. E' ovvio che l'ID mancante è una cancellazione del record, la cosa migliore sarebbe quella di usare un campo "DELETED" da usare come indicatore di record cancellato ed escluderlo da tutte le eventuali query con un "where deleted is not true".
Riassegnare un ID rischi che se per caso in un'altra tabella hai dimenticato un record associato al vecchio ID questo verrà riassociato al nuovo.
Zanna non è collegato   Rispondi Citando
Vecchio 04-08-2008, 03:02   #7
Geggio
Faccio piaceri a Limps
 
L'Avatar di Geggio
 
Data Iscrizione: 03-08-2002
Età: 22
Messaggi: 12.310
Potenza rep: 54 Geggio ha disabilitato la reputazione
allora io sto "lavorando" su un DB del '99 fatto da un ingegnere con la 5a elementare e ke ha usato il tipo NUMERICO anzikè CONTATORE per l'id (genio!)

1) il DB nn si puo modificare ...... indi so cazzi ; (quindi niente cosa DELETED )
2) il suo programma del cazzo gia mi occupato tutti i valori ( fino a 65555 ) quindi gli altri stanno tutti sopra;
2) felice .... è quello il mio problema .... mi deve dare 1 non 2

nome tabella: NOMI
campo: IDNOMI

ci sto smadornando da 3 ore
__________________
...
Geggio non è collegato   Rispondi Citando
Vecchio 04-08-2008, 03:17   #8
Felice R.
masini addicted
 
L'Avatar di Felice R.
 
Data Iscrizione: 24-08-2004
Residenza: Milano
Età: 24
Messaggi: 3.485
Potenza rep: 20 Felice R. ha disabilitato la reputazione
Cita:
Scritto originariamente da Geggio Guarda il messaggio
allora io sto "lavorando" su un DB del '99 fatto da un ingegnere con la 5a elementare e ke ha usato il tipo NUMERICO anzikè CONTATORE per l'id (genio!)

1) il DB nn si puo modificare ...... indi so cazzi ; (quindi niente cosa DELETED )
2) il suo programma del cazzo gia mi occupato tutti i valori ( fino a 65555 ) quindi gli altri stanno tutti sopra;
2) felice .... è quello il mio problema .... mi deve dare 1 non 2

nome tabella: NOMI
campo: IDNOMI

ci sto smadornando da 3 ore
mah guarda se il problema e' cosi' grave (hai solo 65555 id [che poi che cazzo di numero e' 65555 ] e li hai finiti) allora stai solo ritardando la fine...migra le tabelle su altre fatte un po' meglio.

In ogni caso quella query ti da 2 se mancano 1 e 2, ma la volta successiva ti da 1. Qual e' il problema se usi prima il 2 e poi l'1?
Se proprio ti da fastidio, metti l'1 a mano e gli altri funzioneranno per sempre
__________________

Ultima Modifica di Felice R. : 04-08-2008 alle 03:20.
Felice R. è collegato   Rispondi Citando
Vecchio 04-08-2008, 10:07   #9
Zanna
Re di WE
 
L'Avatar di Zanna
 
Data Iscrizione: 01-01-1970
Messaggi: 10.571
Potenza rep: 0 Zanna ha disabilitato la reputazione
Appunto, tu devi riempire i buchi, lo script di Felice ti darà 2 come primo disponibile ma la volta successiva troverà 1 come primo disponibile e hai risolto, dubito che ti freghi molto se popola prima 2 di 1
Zanna non è collegato   Rispondi Citando
Vecchio 04-08-2008, 10:40   #10
Stevegil
:distributoreDtormentoni:
 
L'Avatar di Stevegil
 
Data Iscrizione: 07-01-2003
Residenza: Parma
Età: 42
Messaggi: 13.948
Potenza rep: 58 Stevegil ha Reputazione Nulla --> Liv. 0
Ma soprattutto gege vaffanculo!
__________________
Stevegil non è collegato   Rispondi Citando
rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 membri e 1 ospiti)
 
Strumenti discussione
Modalità di visualizzazione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Gli smilies sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al forum


Tutti gli orari sono GMT +2. Ora sono le 21:24.

Loans | Loan | Mortgage | Loans | Debt Consolidation

Sviluppato da: vBulletin Version 3.7.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
by WE Italia © 2002-2008