duplicare dei record

  • Creatore Discussione Creatore Discussione ric@66
  • Data di inizio Data di inizio

ric@66

Nuovo Utente
1 Nov 2011
17
0
0
Un saluto a tutti ,il mio problema e' il seguente ho un db mysql con una tabella lettura dove al suo interno ci sono delle colonne tra cui la colonna data,ora avrei la necessita di popolare questa colonna con dei valori ,ma il problema e che sono ripetitivi e quindi con il comando INSERT mi da' errore ,provo a fare un esempio per rendere meglio l'idea.
dati da importare
20111023
20111023
20111023
20110820
20110820
e cosi via ,ogni data e' ripetuta piu' volte
Grazie per l'attenzione
 
ciao
domande:
i record esistono di già e tu devi aggiungere/modificare la data o i record non esistono e quindi devi crearli inserendo la data?
che tipo di errore ti da?
eventualmente posta la tabella e il codice di insert
 
ciao dunque i record li ho in formato sql dopo aver effettuato un dump di un altro db ora li devo inserire cosi come sono su un altro computer con stessa tabella lettura e stesso campo data (il campo attualmente e' privo di record ) i record sono all'incirca 46000 ma avendo la data ripetitiva su piu' record mi da' un errore di ad esempio:
Duplicate entry '20111021-000000-0' for key 'PRIMARY'
e quindi questo valore lo inserisce solo una volta invece che 300
La chiave e' Primaria pensate che possa risolvere questo problema??
 
ciao
se il campo è key 'PRIMARY' può contenere solo valori unici. sei sicuro che nel db originale sia primary key?
poi perchè tramite myadmin non esporti il tutto in formato sql (o csv) e poi non lo importi dove ti serve?
 
Ciao giustamente mi fai delle domande legittime perche avendola impostata cosi non si capisce molto ,allora il sistema e' il seguente questi pc hanno la funzione di immagazzinare le letture di sensori di temperatura pertanto ogni 15 minuti il sensore invia delle letture dove il pc le immagazzina in un db con la tabella letture ed al suo interno i seguenti campi IDS-DATA-ORA-TEMPERATURA-UMIDITA' pertanto un sensore nello stesso giorno mi inviera' numerose letture,fin qui tutto ok,il problema nasce perche prima di questa struttura avevamo un'altro sistema che aveva la tabella letture con al suo interno i seguenti campi
IDS-DATAORA-TEMPERATURA-UMIDITA' e avendo la necessita' di importare i vecchi dati su la nuova macchina ho fatto i seguenti passaggi:
avendo necessita' di modificare i dati dela colonna dataora da 2011-10-31 10.23:22 in 20111031 ho eseguito il seguente comando da phpMyAdmin
SELECT (
replace( left( lettura.data, 10 ) , '-', '' )
)
FROM lettura
a quel punto mi ritrovavo solo la data come volevo io e pronta ad inserirla nella nuova colonna DATA con il comando INSERT ma naturalmente mi genera questo errore.
Che sia una key primary lo vedo se faccio un dump del nuovo db e mi scrive primary key potrebbe essere che associa la data al valore di un'altra colonna tipo IDS e quindi avendo IDS che si incrementa ad ogni inserimento lui ignora le date doppie???(se ho detto una stupidagine fai finta di non aver letto)
Scusa la lungagine e spero di essermi fatto capire ti ringrazio per l'attenzione
 
ciao
servirebbe non solo il nome dei campi della tabella, ma la struttura.
da quello che ho capito hai una vecchia tabella del tipo
IDS-DATA-ORA-TEMPERATURA-UMIDITA
dove (credo)
IDS //id del record: formato: int(230) autoincrement primary key
DATA //data: contenente 2011-10-31 formato? date?
ORA //ora: contenente 23:22 formato?
TEMPERATURA //questi ultimi due immagino che siano float (?)
UMIDITA
che vuoi trasferire in una nuova tabella che dovrebbe essere:
IDS //id del record: formato: int(230) autoincrement primary key
DATAORA //data: contenente 20111031 formato? e l'ora? cioe 201110312322 ?
TEMPERATURA //questi ultimi due immagino che siano float (?)
UMIDITA
è così?

e vuoi trasferire i dati dalla vecchia alla nuova?
inoltre: lavori in php?
 
appena a casa proverò a postare la struttura dei campi sia vecchi che nuovi ,confermo lavoro in php ,ciao a presto
 
Allora spero di fare le cose fatte bene e quindi parto dalla macchina vecchia
dove abbiamo una tabella di nome

LETTURA
CREATE TABLE IF NOT EXISTS `lettura` (
`ID_Lettura` int(11) NOT NULL AUTO_INCREMENT,
`Data` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`DataRx` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`IDS` int(11) NOT NULL DEFAULT '0',
`temp` double NOT NULL DEFAULT '0',
`umid` double NOT NULL DEFAULT '0',
`rugiada` double DEFAULT '999999999',
`descrizione` text,
`max` text NOT NULL,
`min` text NOT NULL,
PRIMARY KEY (`ID_Lettura`),
KEY `IDS` (`IDS`),
KEY `Data` (`Data`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=336481 ;

ho fatto un DUMP puo' andare bene? di seguito riporto un record di lettura

ID_Lettura Data DataRx IDS temp umid rugiada descrizione max min
1 2010-05-10 15:12:11 2010-05-10 15:13:02 1 25.23 47.71 13.35 Sensore 1 24/055/100

ID_Lettura c'e' un numero progressivo che aumenta con l'inserimento di ogni lettura
DATA e' la data e ora di lettura inviata dal sensore
IDS e' associato al sensore installato se ho 3 sensori, avro' IDS=1 IDS=2 IDS=3
TEMP valore temperatura
UMID valore umidità
RUGIADA valore rugiada
DESCRIZIONE e' il nome associato al sensore tipo sensore cucina
MAX e MIN sono dei valori che vengono impostati come valore di lettura max e min

MACCHINA NUOVA
nome tabella..............LETTURA

CREATE TABLE IF NOT EXISTS `lettura` (
`gio` int(8) NOT NULL,
`ora` int(6) unsigned zerofill NOT NULL,
`ids` int(3) NOT NULL,
`temp_0` float NOT NULL,
`umid_0` float NOT NULL,
`dewp_0` float NOT NULL,
`temp_1` float NOT NULL,
`temp_2` float NOT NULL,
`temp_3` float NOT NULL,
`umid_1` float NOT NULL,
`umid_2` float NOT NULL,
`umid_3` float NOT NULL,
PRIMARY KEY (`gio`,`ora`,`ids`),
KEY `gio` (`gio`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

GIO equivale alla data di lettura
ORA equivale all ora di lettura
IDS numero di sensore
TEMP_0 valore di lettura temperatura
umid_0 valore di lettura umidità
DEWP_0 valore di calcolo rugiada
TEMP 1-2-3- valori temperatura min media max impostati
UMID 1-2-3- valori umidità min media max impostati

di seguito riporto un record di una lettura su macchina nuova

gio ora ids temp_0 umid_0 dewp_0 temp_1 temp_2 temp_3 umid_1 umid_2 umid_3
20110117 092302 1 19.19 42.58 6.16 18 22 3 40 55 3

spero di non aver fatto una cretinata perche' non so' se era quello che serviva bbbooooohhhhh:confused:
 
invio nuovamente esempio di una lettura vecchia e nuova messe in ordine
VECCHIA

ID_Lettura........1
Data................2010-05-10 15:12:11
DataRx.............2010-05-10 15:13:02
IDS..................1
temp................25.23
umid.................47.71
rugiada.............13.35
descrizione........Sensore 1
max min............24/055/100

NUOVA

gio.......20110117
ora.......092302
ids........1
temp_0..19.19
umid_0...42.58
dewp_0..6.16
temp_1..18
temp_2..22
temp_3..3
umid_1..40
umid_2..55
umid_3..3
 
ciao
l'errore, secondo me, è propio nella tabella nuova PRIMARY KEY (`gio`,`ora`,`ids`),

CREATE TABLE IF NOT EXISTS 'lettura' (
'gio int(8) NOT NULL,
'ora' int(6) unsigned zerofill NOT NULL,
'ids' int(3) NOT NULL,
ecc......
PRIMARY KEY ('gio','ora','ids'),
KEY 'gio' ('gio')
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

io la farei così

CREATE TABLE IF NOT EXISTS `lettura` (
'id' int(11) NOT NULL AUTO_INCREMENT, //questo è l'id del record
'gio' int(8) NOT NULL,
'ora' int(6) unsigned zerofill NOT NULL,
'ids' int(3) NOT NULL,
'temp_0' float NOT NULL,
ecc.....
PRIMARY KEY ('id'),
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

se poi ha bisogno anche di aiuto per lo script di trasferimento, essendo più un problema di php che di mysql, apri un post nella sezione php
 

Discussioni simili