[MySQL] copiare campo precedente

blasco46

Utente Attivo
22 Set 2016
51
0
6
28
Buongiorno, premetto che uso Mysql e phpmyadmin.....avrei la necessità di copiare in un campo della stessa tabella il valore del campo precedente in maniera automatica...praticamente quando vado ad inserire un nuova riga il valore di un campo deve copiarlo dal valore della riga precedente...qualcuno ha qualche idea di come poter fare? Ho provato con qualche trigger ma mi restituisce sempre errore :(
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.039
146
63
PR
www.borgo-italia.it
ciao
prima una domanda:
questo campo, dopo che hai fatto l'insert, viene uppato per qualche ragione in qualche modo?
perchè se non viene uppato tale campo avrà in tutti i record lo stesso valore del primo record
a questo punto se non viene uppato sorge la domanda "a che ti serve un campo che abbia sempre lo stesso valore?"
se invece uppi e usi php, prova questo script
PHP:
//dati connessione
//.....
$query=mysqli_query($connessione,"SELECT campo FROM tabella ORDER BY id DESC LIMIT 1");
$riga=mysqli_fetch_assoc($query);
$campo_da_ins=$riga['campo'];
//...
$query=mysqli_query($connessione,"INSERT INTO tabella(altro_0,campo, altro_1, altro_2) VALUES('$pinco,'$campo_da_ins','$pallo','$pallino')");
//....
 
  • Like
Reactions: blasco46

blasco46

Utente Attivo
22 Set 2016
51
0
6
28
ho una tabella con 4 campi che sono seriale,commessa,codice,scatola........i campi commessa e codice sono impostati di default e ogni volta che inserisco un seriale in automatico vengono inseriti...il campo scatola invece deve cambiare.....ad esempio sparo il primo seriale e metto scatola1...quando vado a sparare il secondo seriale ricopia scatola1 nel campo di prima e la inserisce in automatico senza che inserisco di nuovo....arriverà il punto in cui sparerò un altro seriale e inserirò scatola2...quindi successivamente il seriale dopo copierà scatola2 dal precedente...e così via.....purtroppo mi da sempre errore:(
 

blasco46

Utente Attivo
22 Set 2016
51
0
6
28
per sparare intendo che prendo il seriale da una pistola ottica...ma è come se inserissi normalmente da tastiera...scusa se non sono stato chiaro
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.039
146
63
PR
www.borgo-italia.it
ciao
se non ho capito male tu in pratica "spari" con la pistola ottica, il valore come viene ricevuto? con un $_POST?
poi, non so come, puoi "sparare" e inserire il valore che andra nel campo scatola (anche questo via $_POST?)
mentre i campi commessa e codice si inseriscono in automatico immagino in funzione del seriale
giusto sin qui? se è così potresti strutturare il codice in questo modo (schematizzo e metto i nomi a caso)
PHP:
//....... dati connessione...
$seriale=$_POST['seriale'];
//qui lo sai tu da dove saltano fuori i valori per commessa e codice
if(!isset($_POST['scatola'])){
    //cioè non hai inserito il valore della scatola
    //usi il codice che ti ho postato, cioè ricavi l'ultimo valore di scatola
    $query=mysqli_query($connessione,"SELECT campo FROM tabella ORDER BY id DESC LIMIT 1");//in pratica l'ultimo valore di scatola inserito
    $riga=mysqli_fetch_assoc($query);
    $scatola=$riga['scatola'];
    //...
}else{
    //oltre a sparare hai inserito la scatola
    $scatola=$_POST['scatola'];
}
//qui ilvalore di scatola o viene dall'ultimo record o da quello che hai inserito
$query=mysqli_query($connessione,"INSERT INTO tabella(seriale,commessa, codice, scatola) VALUES('$seriale,'$commessa','$codice','$scatola')");
//.....
il tutto sempre che non abbia capito male
 

blasco46

Utente Attivo
22 Set 2016
51
0
6
28
PRATICAMENTE HO FATTO QUESTO TRIGGER BEFORE INSERT:
.....
BEGIN
IF substring(NEW.seriale,1,10) <> '21000216J-' THEN // FACCIO UN CONTROLLO SULL'INIZIO DEL SERIALE
SET NEW.seriale = NULL;
END IF;
INSERT INTO (`Scatola`)
SELECT `Scatola` FROM `marini-as3236` ORDER BY `id_seriale` DESC LIMIT 1 // VORREI INSERIRE L'ULTIMA SCATOLA
END

COSì MI DA ERRORE DI SINTASSI :(
 

blasco46

Utente Attivo
22 Set 2016
51
0
6
28
L'ERRORE è QUESTO::(
Si sono verificati uno o più errori durante l'esecuzione della tua richiesta: La seguente query è fallita: "CREATE DEFINER=`root`@`localhost` TRIGGER `CONTROLLO1` BEFORE INSERT ON `marinias3236` FOR EACH ROW BEGIN IF substring(NEW.seriale,1,10) <> '21000216J' THEN SET NEW.seriale = NULL; END IF; INSERT INTO (`Scatola`) SELECT `Scatola` FROM `marinias3236` ORDER BY `id_seriale` DESC LIMIT 1 END" Messaggio di MySQL: #1064 Errore di sintassi nella query SQL vicino a '(`Scatola`) SELECT `Scatola` FROM `marinias3236` ORDER BY `id_seriale` DESC LI' linea 5
 

blasco46

Utente Attivo
22 Set 2016
51
0
6
28
avevo dimenticato il nome tabella..ora il trigger me lo prende ma quando vado a fare un inserimento mi da questo::mad:
#1442 ‐ Can't update table 'marini‐as3236' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.039
146
63
PR
www.borgo-italia.it
ciao
hai provato a modificare gli apici o a toglierli?
es. (`Scatola`) diventa ('Scatola')
vedi la differenza degli apici?
ops non avevo visto il tuo ultimo
 
  • Like
Reactions: blasco46

blasco46

Utente Attivo
22 Set 2016
51
0
6
28
si ora il trigger me l ha preso correttamente ma quando vado ad inserire mi da l'errore che avevo in precedenza, cioè questo:
#1442 ‐ Can't update table 'marini‐as3236' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.039
146
63
PR
www.borgo-italia.it
ciao
da quello che capisco non può uppare (in pratica aprire la tabella) in quanto la tabella è gia in uso, immagino dalla select.
non so se puoi dividere le istruzioni
prima la select, sbattere il risultato da qualche parte, chiudere la select e fare l'uppaggio
oggi sono impegnato, se nonpuoi risolvere così, domani chiedo a qualcuno di darci un occhio
 
  • Like
Reactions: blasco46

blasco46

Utente Attivo
22 Set 2016
51
0
6
28
ok grazie mille...resto in attesa di aggiornamenti...intanto provo altre soluzioni
 

blasco46

Utente Attivo
22 Set 2016
51
0
6
28
ciao
da quello che capisco non può uppare (in pratica aprire la tabella) in quanto la tabella è gia in uso, immagino dalla select.
non so se puoi dividere le istruzioni
prima la select, sbattere il risultato da qualche parte, chiudere la select e fare l'uppaggio
oggi sono impegnato, se nonpuoi risolvere così, domani chiedo a qualcuno di darci un occhio
approfitto per chiederti un altra cosa se magari puoi aiutarmi:
come faccio a inserire in una colonna della tabella il nome dell'utente che si collega?
ho creato diversi utenti con phpmyadmin e in base a chi si collega vorrei avere nella tabella il suo nome....esiste un modo?
grazie in anticipo...
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.039
146
63
PR
www.borgo-italia.it
ciao
per sapere chi si collega puoi avere alcuni metodi, ma sempre non sicuri al 100% se vuoi conoscere il nome di chi si collega
potresti usare i cookie però vieni a sapere che si collega un determinato pc e non la persona oppure potresi fare un sistema di registrazione e per collegarsi l'utente deve dare una password e username, ma anche qui c'è lo stsso difetto, posso dare i miei dati a pinco pallo ed essere lui che si collega

per il problema del trigger ho segnalato, spero che qualcuno possa darti una risposta risolutiva
 
  • Like
Reactions: blasco46