Select

filomeni

Moderatore
Membro dello Staff
MOD
14 Mag 2006
1.054
6
38
53
Roseto degli Abruzzi (TE)
www.sitiweb.cloud
Salve,
non so come fare a selezionare la riga precedente alla select eseguita (del database), cioè la variabile nota mi seleziona la riga che devo cancellare, (e fin qui ci siamo) però mi interessa cancellare anche la riga precedente per farlo non ho nessuna variabile che mi possa ricondurre a questa riga, ma so che per certo è alla posizione precedente (viene scritta in automatico e subito dopo viene inserita quella nota).
Spero di essermi spiegato bene.
p.s.
ovvio si parla di mysql
Grazie Maurizio
 
Ciao,

se hai dato un ID (che si auto incrementa) alle righe della tabella di cui parli, ti basterebbe cancellare il record con l'ID precedente a quello trovato.
 
ma so che per certo è alla posizione precedente (viene scritta in automatico e subito dopo viene inserita quella nota
si ma gli id non sono sequenziali... quindi non posso fare "-1" per calcolare il precedente
se non sono sequenziali come puoi sapere per certo che i due record sono contigui ?

in ogni caso,
tieni conto che se la tabella ha indici, normalmente una query ( senza order by ) viene restituita in ordine di indice primario
se la tabella non ha indici, con buona probabilità viene restituita in ordine di inserimento ma non è una certezza

l'esempio che segue, scritto per mssql (non mysql), crea una tabella di esempio ( senza indice ! )
e poi deriva una tabella temporanea, identificando gli elementi in sequenza di inserimento
puoi applicare l'esempio alla tua tabella e verificare se gli elementi da cancellare sono realmente contigui
se la condizione è vera, hai creato un legame tra i due elementi
altrimenti ... non ho idee

"Select * from tbl_frutti" ti elenca gli elementi in ordine di inserimento

"select * from #tbl_temp order by idenCol desc" elenca dall'ultimo al primo con l' ID

ovviamente se cancelli un elemento dalla tabella principale, la tabella temporanea non corrisponde più ...
dovresti ricrearla (ma sta a te decidere in funzione dell'utilizzo)

fai sapere, ciao
Marino

Codice:
use tempDB

Create table tbl_frutti( [frutto] varchar(20) ) 

Insert into tbl_frutti
Select 'Limone'
Union All
Select 'Fragola'
Union All
select 'Melanzana'
Union All 
Select 'Cipolla'
Union All
Select 'Fagiolo'
Union All
Select 'Mela'

Select * from tbl_frutti

drop table #tbl_temp

Select identity(int, 1, 1) as idenCol,frutto 
 into #tbl_temp
from tbl_frutti

select * from #tbl_temp order by idenCol desc
 
Ultima modifica:
ciao Marino,
grazie per il post, è elegante la tua soluzione, ma ho trovato un sistema più semplice e veloce.
Lo posto per la comunità:

Recupero l’ID della riga da cancellare.
Cancello.
Poi faccio la select con
Codice:
WHERE id < $id_recuperato ORDER by ID desc LIMIT 1

In questo modo mi prende il record immediatamente prima dell’ID recuperato.

Grazie Maurizio
 
sicuro di "pescare" l'elemento giusto ?
è un po' come camminare al buio, si inciampa, l'unica cosa sicura è che cancelli 1 record
se puoi fai delle prove per verificare la bontà della soluzione
ciao
Marino
 

Discussioni simili