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

Eléphant du PHP | 61 Messages

28 déc. 2008, 19:47

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.

ViPHP
ViPHP | 2291 Messages

28 déc. 2008, 20:05

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"
     	}

ViPHP
ViPHP | 1996 Messages

30 déc. 2008, 01:12

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.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 61 Messages

30 déc. 2008, 14:35

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

ViPHP
ViPHP | 2291 Messages

30 déc. 2008, 14:58

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 :?:

ViPHP
ViPHP | 1996 Messages

30 déc. 2008, 18:42

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.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

ViPHP
ViPHP | 1996 Messages

30 déc. 2008, 18:50

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);
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 61 Messages

31 déc. 2008, 11:49

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

ViPHP
ViPHP | 2291 Messages

31 déc. 2008, 12:23

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);
?>

Eléphant du PHP | 61 Messages

31 déc. 2008, 21:02

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.

Eléphant du PHP | 61 Messages

01 janv. 2009, 23:57

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?

ViPHP
ViPHP | 2291 Messages

02 janv. 2009, 00:12

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

Eléphant du PHP | 61 Messages

02 janv. 2009, 00:50

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 ?

ViPHP
ViPHP | 2291 Messages

02 janv. 2009, 00:57

Si l'insert est ds la boucle il devrait faire les 200 enregistrement :?:

Eléphant du PHP | 61 Messages

03 janv. 2009, 11:29

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]