Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/06/2006, 14h52   #1
Invité de passage
 
Inscription : juin 2006
Messages : 45
Détails du profil
Informations personnelles :
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : juin 2006
Messages : 45
Points : 3
Points : 3
Par défaut fusionner 2 tables

Bonjour, j'ai actuellement 2 tables dans ma BDD mysql que je voudrais fusionner.

creations :

id; galerie; nom; agrandi; mini; auteur; timestamp; categorie; visites; vote; nbr_votes
_________________

packs :

id; galerie; nom; description; image; archive; auteur; timestamp; poids; downloads; vote; nbr_votes

_________________

Je voudrais fusionner ces 2 tables en une seule : "telechargements", sous cette architecture:

id; galerie; nom; description; agrandi; mini; image; archive; auteur; timestamp; categorie; visites; poids; downloads; vote; nbr_votes

et réattribuer une id aux enregistrements des 2 tables en fonction de leur timestamp. Et ... je suis perdu, je ne vois pas comment faire. Si vous pouviez m'aider, Merci


edit: je pense mettre tous les enregistrements dans un array et d'appliquer un tri fonction du timestamp.. à voir
sawati est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2006, 16h56   #2
Provisoirement toléré
 
Avatar de Maximilian
 
Inscription : juin 2003
Messages : 2 622
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 2 622
Points : 2 505
Points : 2 505
Bonjour,

Moi je procèderais comme ça :

- Création d'une table temporaire avec les colonnes galerie; nom; description; agrandi; mini; image; archive; auteur; timestamp; categorie; visites; poids; downloads; vote; nbr_votes (pas d'identifiant et pas de NOT NULL).

- Insertion des lignes issues de creations dans cette table : INSERT INTO table_temp (...) SELECT (...) FROM creations

- Insertion des lignes issues de packs : INSERT INTO table_temp (...) SELECT (...) FROM packs

- Création de la table finale avec toutes les colonnes + un id auto-incrémenté

- Insertion des lignes de la table temporaire triées par timestamp dans cette table : INSERT INTO table_finale (...) SELECT (...) FROM table_temp ORDER BY timestamp
sans préciser la valeur de l'id auto-incrémenté bien sûr.
__________________
Pensez au bouton
Maximilian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2006, 15h55   #3
Invité de passage
 
Inscription : juin 2006
Messages : 45
Détails du profil
Informations personnelles :
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : juin 2006
Messages : 45
Points : 3
Points : 3
Etant meilleur en php qu'en sql j'ai tapé ce petit code. En groq j'ai fait la même chose que tu voulais faire mais en utilisant un array en php et non une table temporaire. Et ça marche ! Merci qu'en même pour ton aide
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// FUSION DE 2 TABLES ET REATTRIBUTION D'ID EN FONCTION DU TIMESTAMP
 
 
 
mysql_connect("host", "user", "pass");
mysql_select_db("BDD");
 
$sql ='SELECT * FROM creations';
$d = mysql_query($sql) or die( mysql_error() );
while ($t = mysql_fetch_array($d) )
{
 	$data[] = $t;		
}
 
 
 
$sql ='SELECT * FROM packs';
$d = mysql_query($sql) or die( mysql_error() );
while ($t = mysql_fetch_array($d) )
{
 	$data[] = $t;		
}
 
// Obtient une liste de colonnes
foreach ($data as $key => $row) {
   $time[$key]  = $row['timestamp'];
}
 
// Tri les données
// Ajoute $data en tant que premier paramètre, pour trier par la clé commune
array_multisort($time, SORT_ASC, $data);
 
foreach ($data as $key => $row)
{
	if (! is_numeric($data[$key]) )
	{
	$sql = 	'INSERT INTO telechargements
	(id,type,galerie,nom,description,agrandi,mini,image,archive,auteur,timestamp,categorie,visite,poids,downloads,vote,nbr_votes) 
	VALUES 
	("",';
 
	if ( $data[$key]['archive'] == NULL )
	{
		$sql .='"creations",';
	}
	else
	{
		$sql .='"packs",';
	}
 
	$sql .='"'.$data[$key]['galerie'].'",
	"'.$data[$key]['nom'].'",
	"'.$data[$key]['description'].'",
	"'.$data[$key]['agrandi'].'",
	"'.$data[$key]['mini'].'",
	"'.$data[$key]['image'].'",
	"'.$data[$key]['archive'].'",
	"'.$data[$key]['auteur'].'",
	"'.$data[$key]['timestamp'].'",
	"'.$data[$key]['categorie'].'",
	"'.$data[$key]['visite'].'",
	"'.$data[$key]['poids'].'",
	"'.$data[$key]['downloads'].'",
	"'.$data[$key]['vote'].'",
	"'.$data[$key]['nbr_votes'].'"
	)';
 
	mysql_query($sql) or die(mysql_error() );
	}
}
 
mysql_close();
 
echo '<pre>';
print_r($data);
echo '</pre><br />Opération réussie';
 
 
?>
sawati est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h10.


 
 
 
 
Partenaires

Hébergement Web