Accodare record presi da un altra tabella

  • Creatore Discussione Creatore Discussione Max61
  • Data di inizio Data di inizio

Max61

Utente Attivo
2 Mar 2014
760
4
18
Salve, sono di nuovo a chiedere aiuto al forum, ho la necessità di accodare i record di una tabella ad un altra già popolata, ho provato questo codice ma mi dà errore id duplicato, come posso risolvere?
PHP:
INSERT INTO cancellazioneserie_storico(idserie, NomeDitta, NomeProdotto, Serie, SerieAttive, Motivo, Stato, DataInsert, DataCanc)
SELECT idserie, NomeDitta, NomeProdotto, Serie, SerieAttive, Motivo, Stato, DataInsert, DataCanc
FROM cancellazioneserie
Chi mi da una mano?
Grazie
Max61
 
probabilmante la tabella "cancellazioneserie_storico" contiene gli elementi dell'anno(i) passato(i)
e, probabilmente, non hai curato "idserie" della tabella "cancellazioneserie", facendolo ripartire da un valore in confitto con i precedenti esistenti.

o riguardi come hai valorizzato "idserie" nelle due tabelle sistemandolo, cosa che ti preserverebbe eventuali link alla chiave

oppure se non hai link che usano "idserie" come chive, puoi usare un "escamotage",
trovi il numero delle cifre dato dal valore massimo di "idserie" della tabella "cancellazioneserie" per poter anteporre l'anno ed evitare conflitti

esempio se max(idserie) é uguale a 86420 ovvero 5 cifre, potresti sommare yyyy 0 nnnnn = 2021000000 ovvero

SELECT 2021000000+idserie, NomeDitta, .....

fai sapere
ciao
 
probabilmante la tabella "cancellazioneserie_storico" contiene gli elementi dell'anno(i) passato(i)
e, probabilmente, non hai curato "idserie" della tabella "cancellazioneserie", facendolo ripartire da un valore in confitto con i precedenti esistenti.

o riguardi come hai valorizzato "idserie" nelle due tabelle sistemandolo, cosa che ti preserverebbe eventuali link alla chiave

oppure se non hai link che usano "idserie" come chive, puoi usare un "escamotage",
trovi il numero delle cifre dato dal valore massimo di "idserie" della tabella "cancellazioneserie" per poter anteporre l'anno ed evitare conflitti

esempio se max(idserie) é uguale a 86420 ovvero 5 cifre, potresti sommare yyyy 0 nnnnn = 2021000000 ovvero

SELECT 2021000000+idserie, NomeDitta, .....

fai sapere
ciao

ciao marino51, grazie per la risposta, io invece mi chiedevo se fosse possibile cancellare i record della stessa senza azzerare l'id così da ripartire dall'id successivo all'ultimo cancellato.​

es.: tabella cancellazioneserie arrivata al record numero 1235, la svuoto e quando vado a reinserire i record riparte dal numero 1236, è possibile far ciò?
Grazie
Max61
 
dopo la cancellazione puoi fissare il valore da cui ripartire,

ALTER TABLE cancellazioneserie AUTO_INCREMENT=1236;
 
dopo la cancellazione puoi fissare il valore da cui ripartire,

ALTER TABLE cancellazioneserie AUTO_INCREMENT=1236;
Grazie, ho provato ad automatizzare il tutto, ma non ne vengo a capo, con questa query verifico l'ultimo numero in tabella
PHP:
$query="SELECT idserie FROM cancellazioneserie ORDER BY idserie DESC LIMIT 1";
quindi adesso vorrei una query che mi facesse partire la tabella svuotata da quel numero + 1, ho provato così ma ovviamente non funziona...
PHP:
$query = "ALTER TABLE cancellazioneserie AUTO_INCREMENT idserie='$idserie'+1";
 
la query per trovare idserie e per impostare il valore

$query="SELECT 1+max(idserie) FROM cancellazioneserie";
$idserie= ......

$query = "ALTER TABLE cancellazioneserie AUTO_INCREMENT=".$idserie;
 
Ciao marino51, ho provato a fare così, cancello totalmente la tabella e la ricreo ma non riesco a passargli il valore dell'id
PHP:
$query= "CREATE TABLE IF NOT EXISTS cancellazioneserie
     (
    idserie int(11) NOT NULL PRIMARY KEY,
    NomeDitta varchar(255) NOT NULL,
    NomeProdotto varchar(255) NOT NULL,
    Serie varchar(15) NOT NULL,
    SerieAttive varchar(15) NOT NULL,
    Motivo varchar(255) NOT NULL,
    Stato varchar(255) NOT NULL,
    DataInsert varchar(25) NOT NULL,
    DataCanc varchar(25) NOT NULL
     ) WHERE idserie='$idserie+1'";
 
crea la tabella omettendo la clausola where,
poi esegui la query seguente

$query = "ALTER TABLE cancellazioneserie AUTO_INCREMENT=" . $idserie;

ricorda come trovare $idserie

$query="SELECT 1+max(idserie) FROM cancellazioneserie";
 
crea la tabella omettendo la clausola where,
poi esegui la query seguente

$query = "ALTER TABLE cancellazioneserie AUTO_INCREMENT=" . $idserie;

ricorda come trovare $idserie

$query="SELECT 1+max(idserie) FROM cancellazioneserie";
Fatto!!!
Grazie per l'aiuto
Max61
 

Discussioni simili