PDA

Visualizza la versione completa : Problema di logica


supersqualo
29-09-2017, 23:02
Salve a tutti, vorrei porvi il mio quesito che da giorni non mi fa dormire:
-Ho un file con vari elementi (ES. elemento1, elemento2, elemento3).
-Da questo file, tramite un espressione regolare in php, estraggo dei dati grazie all'utilizzo di un batch che esegue l'estrazione in automatico ogni qual volta il file subisce una modifica.
-Dopodich� inserisco gli elementi all'interno di un database mysql attraverso INSERT INTO.

Questo file ad una certa ora (NON REGOLARE) si svuota (NON COMPLETAMENTE).

Il problema che ho � che: inserendo i dati all'interno del database attraverso INSERT INTO quando uno degli elementi (ES. elemento1) viene rimosso APPOSITAMENTE, ovviamente, esso non viene rimosso all'interno del database.
Per� se usassi REPLACE invece di INSERT, quando il file si svuoter�, verranno eliminati anche gli altri elementi all'interno del database (ES. elemento1, elemento2, elemento3) e quindi adesso sono bloccato.
Come potrei risolvere? :messner::messner::messner:
Grazie
PS. non l'ho inserito nella sezione database perch� forse la soluzione sta in una via differente all'uso del file batch!

Scara95
01-10-2017, 13:00
Ma questo file da cosa viene generato?

supersqualo
01-10-2017, 13:01
Ma questo file da cosa viene generato?
Da un gestionale (per esempio)
https://i.imgur.com/Dtslycu.png
Io estraggo tutti i prodotti con la P (qui ci sono solo quelli con il flag P) e li inserisco in un database! Ad una certa ora, quando viene effettuato l'ordine (quindi 2 volte al giorno) il file si svuota ma in maniera random! Alcuni prodotti con la P e senza P restano (solitamente sono sempre gli stessi e sono vecchi) ma a me non interessano! Tutto ci che vorrei mantenere aggiornato il db con i prodotti aventi la P (lo otterrei usando REPLACE poich a volte viene annullata la "P"renotazione di un prodotto quindi alcuni record precedentemente inseriti nel db devono essere eliminati) ma non supererei il problema dello svuotamento automatico (che utilizzando REPLACE cancellerebbe tutto)

clasku
01-10-2017, 15:31
Il file contiene sempre i prodotti che hanno la P, se non ci sono li devi eliminare.
Due soluzioni
- svuota la tabella e riempila nuovamente ad ogni esecuzione
- usa un identificativo univoco tra file e db per aggiornare i dati (ad esempio, aggiungi un campo "dataAggiornamento" che aggiorni ad ogni esecuzione e alla fine della stessa cancelli quelli non aggiornati, se ce ne sono)

supersqualo
01-10-2017, 15:36
Il file contiene sempre i prodotti che hanno la P, se non ci sono li devi eliminare.
Non ho capito cosa significa? Il file contiene sia prodotti con la p che senza la p (con l espressione regolare isolo i prodotti con la P) quando si svuota restano comunque prodotti con la p e senza la p che non mi creano nessun problema e possiamo non calcolarli proprio (se ne deve tener conto solo nella logica, ovvero non puoi sfruttare un if del tipo se le P=0 nn eseguire la query)

Due soluzioni
- svuota la tabella e riempila nuovamente ad ogni esecuzione
- usa un identificativo univoco tra file e db per aggiornare i dati (ad esempio, aggiungi un campo "dataAggiornamento" che aggiorni ad ogni esecuzione e alla fine della stessa cancelli quelli non aggiornati, se ce ne sono)
-Se usassi REPLACE e come se la riempissi ogni volta ma non posso perch quando il file si svuoter verranno cancellati tutti i record nella tabella
-Questa non l ho capita
GRAZIE

clasku
01-10-2017, 17:42
la prima era un'affermazione, quello che ho capito dal tuo post iniziale.

posto che non ho capito come viene aggiornato questo file sul quale basi il tutto ( un file che contiene tutto o contiene solo i dati "modificati" nell'intervallo di tempo tra l'esportazione precedente e quella attuale?), ti spiego la seconda:
1. trova una chiave univoca che ti consenta di collegare con certezza la riga del file con quella del database dove salvi i dati
2. usa questa chiave per fare gli aggiornamenti e salva in un nuovo campo il momento dell'esecuzione dell'aggiornamento
3. usa il nuovo campo "dataAggiornamento" per ripulire il DB quando serve

supersqualo
01-10-2017, 17:53
la prima era un'affermazione, quello che ho capito dal tuo post iniziale.

posto che non ho capito come viene aggiornato questo file sul quale basi il tutto ( un file che contiene tutto o contiene solo i dati "modificati" nell'intervallo di tempo tra l'esportazione precedente e quella attuale?), ti spiego la seconda:
1. trova una chiave univoca che ti consenta di collegare con certezza la riga del file con quella del database dove salvi i dati
2. usa questa chiave per fare gli aggiornamenti e salva in un nuovo campo il momento dell'esecuzione dell'aggiornamento
3. usa il nuovo campo "dataAggiornamento" per ripulire il DB quando serve
Allora ti spiego meglio di cosa avrei bisogno (ho confuso l'uso di REPLACE)
1)Avrei bisogno di una query che elimini i prodotti con la P, dal database, qualora vengano eliminati volontariamente all'interno del gestionale
2)Che non elimini tutto quando il file si svuoter!
--------------------
1)La chiave univoca suppongo sia il prodotto... il nome del prodotto
2)in che maniera? non riesco ad immaginare lo sviluppo
3)anche questo non lo capisco

E chiedo scusa ho confuso l'uso di REPLACE

Ti posto tutto il sistema se puoi testarlo mi faresti un enorme piacere
https://ufile.io/tm15d

Scara95
01-10-2017, 18:19
Che tipo di accesso hai al gestionale? sviluppato da terzi? Esiste qualche altra forma di esportazione che non sia questo file che sembra per uso interno?

supersqualo
01-10-2017, 18:21
Che tipo di accesso hai al gestionale? sviluppato da terzi? Esiste qualche altra forma di esportazione che non sia questo file che sembra per uso interno?
Si di terzi, un altra forma di esportazione sarebbe esportarlo in csv ma purtroppo non posso farlo avvenire automaticamete! Dovrei aprire il gestionale ogni giorno prima di fare l'ordine definitivo ed esportarli! Ma purtroppo io non sono sempre a lavoro e vorrei evitare di delegare altri a farlo!

Scara95
01-10-2017, 18:24
Hai provato a contattare l'azienda che lo produce per chiedere se c' un modo di automatizzare esportazione e/o backup?

Loading