Bon ceci est la suite d'un précédent post, j'ai redéfinis le sujet pour qu'il soit plus correct.

J'ai donc un porblème, j'ai trois tables:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
CREATE TABLE IF NOT EXISTS testtable_captor (
	id_captor TINYINT UNSIGNED NOT NULL PRIMARY KEY,	/*Autofill ID*/		/*256*/
	name VARCHAR(10) NOT NULL,
	present BOOLEAN
	) ENGINE = innodb COMMENT = 'Table des n° de tous les capteurs';
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
CREATE TABLE IF NOT EXISTS testtable_data_temperature (
	id_time MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,	/* 0 à 16 777 215*/
	datetime DATETIME UNIQUE NOT NULL,
	temperature1 TINYINT UNSIGNED ,	/*0 to 255*/
	temperature2 TINYINT UNSIGNED,
	temperature3 TINYINT UNSIGNED,...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
CREATE TABLE IF NOT EXISTS testtable_data_voltage (
	id_time MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,	/* 0 à 16 777 215*/
	datetime DATETIME UNIQUE NOT NULL,
	voltage1 SMALLINT ,	/*-32768 to  32767*/
	voltage2 SMALLINT,
	voltage3 SMALLINT,...
Je charge dans ces tables les valeurs nécessaires à partir de trois fichiers disctincts, tout en sachant que les mesures des temperatures et voltages sont faites en même tems (donc même datetime..). Grâce au post précédent je n'ai plus de doublons lorsque je charge mes données dans ces tables la.

Maintenant je souhaite réunir toutes les valeurs dans une même table, selon le datetime:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
CREATE TABLE IF NOT EXISTS testtable_data (
	id_time INTEGER REFERENCES test_table_temperature(id_time),
	datetime DATETIME NOT NULL,
	id_captor INTEGER REFERENCES test_table_captor(id_captor),
	name VARCHAR(10) NOT NULL,
	present BOOLEAN,
	temperature TINYINT UNSIGNED,
	voltage SMALLINT
	) ENGINE = innodb COMMENT = 'Table with all temperature';
 
INSERT
IGNORE
INTO testtable_data(id_time,datetime,id_captor,name,present)
SELECT DISTINCT id_time,datetime,id_captor,name,present
FROM testtable_captor, testtable_data_temperature
ORDER BY id_time,id_captor;
 
UPDATE testtable_data
SET temperature = (SELECT temperature1 FROM testtable_data_temperature WHERE testtable_data.datetime=testtable_data_temperature.datetime),
voltage = (SELECT voltage1 FROM testtable_data_voltage WHERE testtable_data.datetime=testtable_data_voltage.datetime)
WHERE id_captor=1
AND datetime=(SELECT datetime FROM testtable_data_temperature WHERE testtable_data.datetime=testtable_data_temperature.datetime);
...
Le souci est qu'avec celà j'ai des doublons lorsque je lance plusieurs fois mon fichier, et que je ne trouve pas où mettre un UNIQUE pour éviter les doublons, car chaque valeur de datetime, de captor... doit être présente plusieurs fois. Alors comment faire? Créer un nouveau champ? Récupérer le nombre de valeurs mises dans les tables pour ignorer les lignes déjà chargées? Ou utiliser une fonction que je ne connais pas??

J'espère avoir été à peu près clair... Merci pour votre aide