- Home
- Categorie
- Coding e Sistemistica
- PHP
- Select che include una Delete
-
Select che include una Delete
Ciao,
è il mio primo messaggio su GiorgioTave...
ho una richiesta un po' particolare...
vorrei fare una query al database che mi seleziona 10 righe del database e mi elimina quelle in più... il tutto però in una unica query...
mi spiego meglio:
ho una Tabella "LOG" che ha come campi "ID" "NOME" "DATA"
ora mi servirebbe recuperare gli ultimi 10 risultati in base alla data di un determinato nome eliminando automaticamente gli altri....
si può fare?
se si come??? ricordo il tutto in una unica query.... consigliatemi Grazie
-
ciao scuottolinx e benvenuto nel Forum GT
la vedo male sta cosa, anche perchè per poter dire al tuo script di cancellare dei record dal Db devi poter comunicare cosa cancellare, e se prima non fai un SELECT come ottieni questi dati ?
-
infatti chiedevo una select che includesse una delete in essa....
-
Forse mi son spiegato male
Se prima non selezioni i 10 campi che ti interessano (utilizzo del SELECT), non puoi assegnare un criterio alla cancellazione (utilizzo del DELETE).
Quindi dovrai prima eseguire un SELECT e poi fare un DELETE dopo aver recuperato il criterio di cancellazione.
Spero di esser stato più chiaro adesso
-
quindi come potrei fare???
potresti farmi qualche esempio??? ti ringrazio...
-
Più che selezionare 10 campi io opterei per:
Effettuare una ricerca/estrazione in modo che mi restituisca il minore valore della data accettata.
Anzi che occupare 10 volte la memoria, la occupo solo una volta memorizzando il minor valore in una variabile.
Questa variabile verrà poi usata in una seconda query di questo tipo:
DELETE FROM nome_tabella WHERE data < $variabile
Non sarebbe meglio?
-
@Portaile: Potrebbe, ma non sapendo che dati vengon fuori pensavo di selezionare gli ultimi 10 record a ritroso per poi recuperare un valore univoco (id per esempio).
Metti caso che dal 12° record al 9° abbiano tutti la stessa data, cancelleresti anche 2 dei 10 record che ti interessano
Poi ripeto, dipende da che dati conserva scuottolinx sulla tabella e con che cadenza di date
Ammetto comunque la mia inesperienza e mi affido ai tuoi consigli
Non essendo un esperto spesso vado un po' alla spicciola@scuottolinx, la soluzione di Portaile84 è più veloce e fa' lavorare di meno il server, pertanto potresti utilizzare tranquillamente quella (anche perché è più esperto di me in PHP, io sono un hobbista fai da me ), credo che comunque dipenda da cosa conterrà (o contiene) la tabella
Nel caso possano esserci date ripetute e che si trovino a cavallo del range che ti interessa potresti fare una SELECT impostandola con ordinamento DESC e LIMIT 1, 10.
Per fare il DELETE ti recuperi un valore sicuro, chesso' l'id (del 10° record), e metti come condizione WHERE id < '$id' ;se non ho commesso Orrori la cosa dovrebbe andare in tal modo
EDIT: uhm.....mi è venuto in mente dopo
[php] "SELECT MIN (id) FROM table_log ORDER BY data DESC LIMIT 1, 10";[/php]se non sbaglio sintassi ti da' come risultato l'id minimo degli ultimi 10 record, id che poi passi al tuo:
[php]"DELETE FROM table_log WHERE id < '$id'";[/php]
Portaile84 potrebbe essere una soluzione?
-
Si verissimo.
Rimane comunque il fatto che l'utente vuole lasciare 10 righe.Se però la data venisse memorizzata nel formato Unix timestamp (quella strana sequenza di 10 cifre che rappresenta i secondi trascorsi dalla Unix Ephoc) allora la cosa non sussiste più...
Il timestamp riporta anche i secondi. E' quasi improbabile che due dati siano stati inseriti nello stesso secondo.
*Ora mi permetto di aprire un piccolo OT:
Io non mi ritengo esperto... sicuramente lo sono meno di te.
Il php è entrato a fare parte di me da meno di due anni. Ho ancora molti bit , pacchetti di informazioni, da assimilare (tanto per rimanere a tema).
Per la cronoca: anche io sono un hobbista fai da me
Tanto hobbista che odio e rifiuto ciò che gli altri usano (joomla ecc...). Ho fatto una sola eccezione, per il mio forum... ma questo è un caso a parte visto che mi trovo a sviluppare pacchetti per quella piattaforma
Beh che altro dire... benvenuto nel club fratello!
*