Page 1 sur 2

Comment transférer par date les champs dans une autre table?

Posté : 28 déc. 2008, 19:47
par olivia
Bonjour à vous tous , j' ai dans ma base de donnée 2 tables identiques je souhaite sélectionner tous les champs d'un couq enregistrés en 2007 qui se présentent comme cela :
2007-01-20 ou bien 2007-12-30 avec leurs enregistrements réciproques situés dans
ma table - associations -
et les transférer dans ma table -association_2007 -
Pour l'instant je le fait un par un avec un programme php insert et delete mais c'est vraiment trop long. Pourriez vous m'aider svp, je vous remerçie.

Posté : 28 déc. 2008, 20:05
par dunbar
Salut
L'idée serais de prendre tout les enregistrement de l'année 2007 et de faire un insert des données dans ta seconde table une piste ?
$sql=" SELECT *
              FROM table1
              WHERE YEAR(ton_champ_date) = '2007'";

     while($row = mysql_fetch_array($sql)){


     	$insert = "requete insertion FROM table2"
     	}

Posté : 30 déc. 2008, 01:12
par Aureusms
J'ai déjà eu ce problème, voici un bout de mon code recorrigé (vérifie le avant en faisant un echo de ta requete).
$sql=" SELECT *
              FROM associations
              WHERE ton_champ_date LIKE '2007%'";

$requete_insert = "INSERT INTO association_2007 values (";
while($row = mysql_fetch_row($sql)){
//on considère que les tables sont rigoureusement identiques ! important

foreach ($row as $valeur)
  { $requete_insert .="'$valeur',";
   }
//on retire la virgule en trop
$requete_insert .= substr($requete_insert,0,-1);
$requete_insert .= "),(";
}

//on retire les derniers ",(" en trop
$requete_insert = substr($requete_insert,0,-2); 

//Ensuite tu fais un DELETE FROM associations WHERE ton_champ_date LIKE '2007%'
//vérifie bien toute les requete avant.

Posté : 30 déc. 2008, 14:35
par olivia
Merci à vous deux j'arrive bien à sotir mes enregistrements correspondant à 2007, mais impossible de les injecters dans la nouvelle table. Dunbar ton code fonction bien aussi jusqu'a l'insertion ou rien est possible.
$db_link = @mysql_connect($sql_serveur,$sql_user,$sql_passwd);
if(!$db_link) {echo "Connexion impossible à la base de données <b>$sql_bdd</b> sur le serveur <b>$sql_server</b><br>Vérifiez les paramètres du fichier"; exit;}


$resultat = mysql_db_query($sql_bdd,"SELECT count(*) FROM associations WHERE date LIKE '%".$recherche."%';",$db_link) or die(mysql_error());
$nb_total = mysql_fetch_array($resultat);
if (($nb_total = $nb_total[0]) == 0) 
{
    echo 'Aucune réponse trouvée';
}
else 
{
    
	
    if (!isset($_GET['debut'])) $_GET['debut'] = 0;
    $nb_affichage_par_page = 200;
	$rechtable ="associations";
$sql = mysql_db_query($sql_bdd,"SELECT * FROM ". $rechtable ." WHERE date LIKE '%".$recherche."%' ORDER BY id DESC LIMIT ". $_GET['debut'] .",". $nb_affichage_par_page ." ;",$db_link) or die(mysql_error());

 
 
 $requete_insert = "INSERT INTO association_2007 values ("; 
while($row = mysql_fetch_row($sql)){ 


foreach ($row as $valeur) 
  { $requete_insert .="'$valeur',"; 
   } 

$requete_insert .= substr($requete_insert,0,-1); 
$requete_insert .= "),("; 
} 


$requete_insert = substr($requete_insert,0,-2);  

mysql_free_result ($sql); 
	
 echo 'Navigation des pages : <span class="gras">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 3).'</span>';
}
mysql_free_result ($resultat); 
mysql_close($db_link);
Cela fais une semaine que j'échoue je n'arrive vraiment pas à injecter dans nouvelle table malgrès toutes mes recherches.
Pour ton code Aureusms voila la réponse du serveur

Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 5833899 bytes) in /home/clients/legroupe.com/http/rech/supprimer_assos_anTEST.php4 on line 68

et la ligne 68 c'est ca
$requete_insert .= substr($requete_insert,0,-1);

Merci vraiment à vous pour votre temps passé avec mes soucis. Bisous

Posté : 30 déc. 2008, 14:58
par dunbar
Montre nous la structure de tes tables
Et je ne voie pas l'avantage de faire un LIKE dans ton exemple puisque la donnée est connue année 2007 :?:

Posté : 30 déc. 2008, 18:42
par Aureusms
Moi j'aime bien les bisous alors je vais t'aider...
Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 5833899 bytes) in /home/clients/legroupe.com/http/rech/supprimer_assos_anTEST.php4 on line 68

et la ligne 68 c'est ca
$requete_insert .= substr($requete_insert,0,-1);


Ca veut dire que tu as pas mal d'enregistrements et que la ligne texte commence à saturer.
Il va falloir la découper et adapter un peu si on veut que cela fonctionne.

Posté : 30 déc. 2008, 18:50
par Aureusms
Concernant ton code, essaye dont cela :
$db_link = @mysql_connect($sql_serveur,$sql_user,$sql_passwd);
if(!$db_link) {echo "Connexion impossible à la base de données <b>$sql_bdd</b> sur le serveur <b>$sql_server</b><br>Vérifiez les paramètres du fichier"; exit;}

if (!isset($_GET['debut'])) $_GET['debut'] = 0;

$nb_affichage_par_page = 200;
$rechtable ="associations";

$sql = mysql_db_query($sql_bdd,"SELECT * FROM ". $rechtable ." WHERE date LIKE '".$recherche."%' ORDER BY id DESC LIMIT ". $_GET['debut'] .",". $nb_affichage_par_page ." ;",$db_link) or die(mysql_error());

if (mysql_num_rows($sql) == 0)
   {
   echo "pas d'enregistrements";
   }
else
   {
   $requete_insert = "INSERT INTO association_2007 values ("; 
   while ($row = mysql_fetch_row($sql)) 
           { 
           foreach ($row as $valeur) 
                      { 
                      $requete_insert .="'$valeur',"; 
                       } 

           $requete_insert .= substr($requete_insert,0,-1); 
           $requete_insert .= "),("; 
           } 
    $requete_insert = substr($requete_insert,0,-2);  
    mysql_free_result ($sql); 
    
echo 'Navigation des pages : <span class="gras">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 3).'</span>';
}
mysql_free_result ($resultat); 
mysql_close($db_link);

Posté : 31 déc. 2008, 11:49
par olivia
Aureusms je ne vois pas la différence avec le code ou il y a erreur suite au poids des infos mais j'ai quand même essayé sans succé toujours la même phrase d'erreur.
Dunbar tu as raison cela fonctionne bien avec YEAR (date) si tous les enregistrement sont éditer sur une page mais si je passe en page 2 cela saute. Je te donne la structure de la table
CREATE TABLE associations (
PRIMARY KEY (id),
id INT(10) auto_increment,
adresse_fichier varchar(100) NOT NULL,
nomfichier varchar(50) NOT NULL,
nom varchar(20) NOT NULL,
mdp varchar(6) NOT NULL,
titre varchar(30) NOT NULL,
rubrique varchar(40) NOT NULL,
ville varchar(20) NOT NULL,
description longblob NOT NULL,
membre varchar(15) NOT NULL,
condition varchar(15) NOT NULL,
coordonnees varchar(100) NOT NULL,
date date NOT NULL default '0000-00-00',
heure time NOT NULL default '00:00:00'
);
Voila je continu à cherché merci à plus tard bisous

Posté : 31 déc. 2008, 12:23
par dunbar
Salut,
Et comme ceci cela donne quoi ?
<?php
     $db_link = mysql_connect($sql_serveur, $sql_user, $sql_passwd);
     if(!$db_link)
     {
     echo "Connexion impossible à la base de données <b>'".$sql_bdd."'</b>
     sur le serveur <b>'".$sql_server."'</b><br>Vérifiez les paramètres du fichier";
     exit;
     }


$resultat = mysql_db_query($sql_bdd,"SELECT count(*) FROM associations WHERE date LIKE '%".$recherche."%';",$db_link) or die(mysql_error());
$nb_total = mysql_fetch_array($resultat);
if (($nb_total = $nb_total[0]) == 0)
{
    echo 'Aucune réponse trouvée';
}
else
{


    if (!isset($_GET['debut'])) $_GET['debut'] = 0;
    $nb_affichage_par_page = 200;
    $rechtable ="associations";
$sql = mysql_db_query($sql_bdd,"SELECT * FROM ". $rechtable ." WHERE YEAR(date)= '2007' ORDER BY id DESC LIMIT ". $_GET['debut'] .",". $nb_affichage_par_page ." ;",$db_link) or die(mysql_error());

     while($row = mysql_fetch_row($sql)){
     	                          $requete_insert = "INSERT INTO
                                                      association_2007
                                                 SET
                                                 id                 = '',
                                                 adresse_fichier    = '".$row['adresse_fichier']."',
                                                 nomfichier         = '".$row['nomfichier']."',
                                                 nom                = '".$row['nom']."',
                                                 mdp                = '".$row['nomfichier']."',
                                                 titre              = '".$row['mdp']."',
                                                 rubrique           = '".$row['rubrique']."',
                                                 ville              = '".$row['ville']."',
                                                 description        = '".$row['description']."',
                                                 condition          = '".$row['condition']."',
                                                 coordonnees        = '".$row['coordonnees']."',
                                                 date               = '".$row['date']."',
                                                 heure              = '".$row['heure']."'

                                                  ";




}



mysql_free_result ($sql);

 echo 'Navigation des pages : <span class="gras">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 3).'</span>';
}
mysql_free_result ($resultat);
mysql_close($db_link);
?>

Posté : 31 déc. 2008, 21:02
par olivia
Merci Dunbar j'ai essayé avec ton code, cela me donne l'echo de ma barre de navigation sans erreur sur ma page reponse mais il n'y a pas d'enregistrement dans la table association2007.
Merci Bisous et bonne soirée.

Posté : 01 janv. 2009, 23:57
par olivia
j'ai bien tester en transforment SET par SELECT et en inserant un FROM après le
heure = '".$row['heure']."'
rien à faire ce n'est pas du à L'id de la table association2007 qu'il ne doit pas monter mais enregistré seulement l'info?

Posté : 02 janv. 2009, 00:12
par dunbar
Rajoute ceci après la requete INSERT
$result = mysql_query($requete_insert) or die ('Ne trouve pas tout les données : '.mysql_error());
Pour vérifier qu'il ne retourne pas d'erreur, fait également un echo de ta requete pour voir se qu'il te retourne

Posté : 02 janv. 2009, 00:50
par olivia
non sa marche pas il n'y a pas d'erreur sur la page réponse. j'ai changé ma 2eme table au niveau de l id pour pas qu elle comptabilise mais rien a faire peut être qu'il n'y a pas de code pour ca car je voie sur le net les requetes sont faite a chaque fois pour un transfer seulement et non 200 ?

Posté : 02 janv. 2009, 00:57
par dunbar
Si l'insert est ds la boucle il devrait faire les 200 enregistrement :?:

Posté : 03 janv. 2009, 11:29
par olivia
Bonjour Dunbar j'ai modifié un peu ton code qui enregistre les informations maintenant jusqu'au moment ou il rencontre une apostrophe dans un mot ou une phrase du champ, existe t'il un code spécifique à l'acceptation des apostrophes, voila la legere modif de ton aide qui m'a vraiment aiguiller.
$db_link = @mysql_connect($sql_serveur,$sql_user,$sql_passwd);
if(!$db_link) {echo "Connexion impossible à la base de données <b>$sql_bdd</b> sur le serveur <b>$sql_server</b><br>Vérifiez les paramètres du fichier"; exit;}

$sql = mysql_db_query($sql_bdd,"SELECT id,adresse_fichier,nomfichier,nom,mdp,titre,rubrique,ville,description,condition,coordonnees,date,heure FROM associations WHERE YEAR(date)= '2006' ORDER BY id DESC;",$db_link) or die(mysql_error()); 

     while($row = mysql_fetch_row($sql))
	 { 
                                   $requete_insert = "INSERT INTO 
                                                      association2007 
                                                 SET 
                                                 id                 = '".$row[0]."',
                                                 adresse_fichier    = '".$row[1]."', 
                                                 nomfichier         = '".$row[2]."', 
                                                 nom                = '".$row[3]."', 
                                                 mdp                = '".$row[4]."', 
                                                 titre              = '".$row[5]."',
                                                 rubrique           = '".$row[6]."', 
                                                 ville              = '".$row[7]."', 
                                                 description        = '".$row[8]."',
                                                 
			condition          = '".$row[9]."',
                                                 coordonnees        = '".$row[10]."', 
                                                 date               = '".$row[11]."', 
                                                 heure              = '".$row[12]."'
												 "; 
 
$result = mysql_query($requete_insert) or die ('Ne trouve pas tout les données : '.mysql_error());


} 



mysql_free_result ($sql);
	echo 'CODE ok bon'; 


mysql_close($db_link); 
 
[/code]