[Résolu] Create TEMPORARAY TABLE à partir de 2 tables temp.

Mammouth du PHP | 881 Messages

09 mai 2012, 16:38

Bonjour,

je cherche depuis un bon moment ici et ailleurs comment fusionner deux tables complètement différentes.
La solution sur laquelle je planche actuellement est de créer deux tables temporaires à structures semblables pour ensuite les fusionner dans une troisième.

Voilà où j'en suis: la création des deux premières tables temporaires va très bien, mais lorsque vient temps d'exploiter la troisième, j'obtiens ce message d'erreur #1168 - Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist

Les recherches sur internet me mènent à vérifier la structure, définir les index, définir le type des tables.
J'ai donc ajouter l'option "engine=MyISAM" à mes commandes, j'ai aussi défini des index.
Voici les commandes MySQL que j'essaie dans ma fenêtre phpmyadmin
CREATE TEMPORARY TABLE Actis ENGINE=MyISAM SELECT (id_activ + 100000) AS id, "a" AS Genre, LaDate AS LaDate, Titre AS Titre FROM plongee_activites  WHERE MONTH( LaDate ) = 5 AND YEAR(LaDate) = 2012;
ALTER TABLE Actis ADD Key(id); 
SELECT * FROM Actis; 

CREATE TEMPORARY TABLE Cours ENGINE=MyISAM SELECT cours_id AS id, "c" AS Genre, cours_dteDeb AS LaDate, cours_titre AS Titre FROM plongee_cours  WHERE MONTH( cours_dteDeb ) = 5 AND YEAR( cours_dteDeb ) = 2012; 
ALTER TABLE Cours ADD Key(id); 
SELECT * FROM Cours; 

CREATE TEMPORARY TABLE Tout (`id` INT NOT NULL, Genre CHAR(1), `LaDate` DATE , `Titre` CHAR( 30 ) NOT NULL, INDEX(id)) TYPE=MERGE UNION=(Actis,Cours); 
SELECT * FROM Tout; 
Les commandes SELECT portées sur les deux premières tables temporaires n'y sont qu'à des fins de vérification.
Notons cependant le résultat de la première - même si elle contient ENGINE=MyISAM:
unknown table status: TABLE_TYPE
unknown table status: Comment


Je soupçonne que ce soit une piste de solution, mais je n'arrive pas à imposer un TABLE_TYPE à cette table, croyant l'avoir fait dans ma commande.

Merci à l'avance de votre aide.
Modifié en dernier par Patriboom le 09 mai 2012, 16:54, modifié 1 fois.
Soyez artisans de paix

Mammouth du PHP | 881 Messages

09 mai 2012, 16:53

Bonjour à nouveau,

il semble que la solution suivante fonctionne:
CREATE TEMPORARY TABLE Actis ENGINE=MyISAM SELECT (id_activ + 1000000) AS id, "a" AS Genre, LaDate AS LaDate, Titre AS Titre FROM plongee_activites  WHERE MONTH( LaDate ) = 5 AND YEAR(LaDate) = 2012;
ALTER TABLE Actis ADD Key(id); 
SELECT * FROM Actis; 
CREATE TEMPORARY TABLE Cours ENGINE=MyISAM SELECT cours_id AS id, "c" AS Genre, cours_dteDeb AS LaDate, cours_titre AS Titre FROM plongee_cours  WHERE MONTH( cours_dteDeb ) = 5 AND YEAR( cours_dteDeb ) = 2012; 
ALTER TABLE Cours ADD Key(id); 
SELECT * FROM Cours;
CREATE TEMPORARY TABLE Tout ENGINE=MyISAM SELECT * FROM Actis;
INSERT INTO Tout SELECT * FROM Cours;
SELECT * FROM Tout; 
Merci de votre attention
Soyez artisans de paix