Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
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/05/2007, 13h55   #1
Nouveau Membre du Club
 
Inscription : avril 2003
Messages : 201
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 201
Points : 31
Points : 31
Par défaut [SQL] Requete insert into

Bonjour
J'ai une table avec 2000 enregistrements structure suivante :

Code SQL :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE TABLE nuke_queue (
  qid smallint(5) UNSIGNED NOT NULL AUTO_INCREMENT,
  uid mediumint(9) NOT NULL DEFAULT '0',
  uname varchar(40) NOT NULL DEFAULT '',
  subject varchar(100) NOT NULL DEFAULT '',
  story text,
  storyext text NOT NULL,
  timestamp datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  topic varchar(20) NOT NULL DEFAULT '',
  alanguage varchar(30) NOT NULL DEFAULT '',
  PRIMARY KEY  (qid),
  KEY qid (qid),
  KEY uid (uid),
  KEY uname (uname)
) TYPE=MyISAM;

Je voudrais passer ces enregistrements dans cette table :

Code SQL :
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
CREATE TABLE nuke_stories (
  sid int(11) NOT NULL AUTO_INCREMENT,
  catid int(11) NOT NULL DEFAULT '0',
  aid varchar(30) NOT NULL DEFAULT '',
  title varchar(80) DEFAULT NULL,
  time datetime DEFAULT NULL,
  hometext text,
  bodytext text NOT NULL,
  comments int(11) DEFAULT '0',
  counter mediumint(8) UNSIGNED DEFAULT NULL,
  topic int(3) NOT NULL DEFAULT '1',
  informant varchar(20) NOT NULL DEFAULT '',
  notes text NOT NULL,
  ihome int(1) NOT NULL DEFAULT '0',
  alanguage varchar(30) NOT NULL DEFAULT '',
  acomm int(1) NOT NULL DEFAULT '0',
  haspoll int(1) NOT NULL DEFAULT '0',
  pollID int(10) NOT NULL DEFAULT '0',
  score int(10) NOT NULL DEFAULT '0',
  ratings int(10) NOT NULL DEFAULT '0',
  associated text NOT NULL,
  PRIMARY KEY  (sid),
  KEY pid (sid),
  KEY cid (catid)
) TYPE=MyISAM;

Ca fait 2 jours que j'essaie de trouver une requête php ou sql qui ferait ça mais je ne vois pas du tout comment faire, pourriez vous m'aiguiller s'il vous plait ?

Voila le sql pour un seul enregistrement mais comment faire pour tous les 2000 et vider la table nuke_queue ?

Code :
$result = sql_query("insert into ".$prefix."_stories values (NULL, '$catid', '$aid', '$subject', now(), '$hometext', '$bodytext', '0', '0', '$topic', '$author', '$notes', '$ihome', '$alanguage', '$acomm', '$haspoll', '$id', '0', '0', '$associated')", $dbi);
isa150183 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/05/2007, 14h10   #2
Membre éclairé
 
Avatar de Asmodean
 
Inscription : février 2006
Messages : 311
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France

Informations forums :
Inscription : février 2006
Messages : 311
Points : 346
Points : 346
Envoyer un message via MSN à Asmodean
Ben je ne vois qu'un SELECT * FROM nuke_queue suivie d'une boucle qui pour chaque enregistrement fais un insert into. Sauf que ca risque d'etre un peu long enfin si ca marche essaie de le faire sur des partie de ta table (genre 500 par 500).
Asmodean est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/05/2007, 22h27   #3
Nouveau Membre du Club
 
Inscription : avril 2003
Messages : 201
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 201
Points : 31
Points : 31
Par défaut reponse

Merci pour ta réponse

Voila ce que j'ai reussi à faire, mais ça ne marche toujours pas, peux tu me donner un coup de pouce ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
<?
 
$db = mysql_connect('localhost', 'user', 'passe') or die(mysql_error());  
mysql_select_db('base',$db);  
 
$sql = "SELECT * FROM nuke_queue"; 
$sql2 = mysql_query($sql) or die(mysql_error()); 
 
while ($Rowsql2 = mysql_fetch_assoc($sql2)) 
{ 
$sql = "insert into nuke_stories values (NULL, '$catid', '$aid', '$subject', now(), '$hometext', '$bodytext', '0', '0', '$topic', '$author', '$notes', '$ihome', '$alanguage', '$acomm', '$haspoll', '$id', '0', '0', '$associated')"; 
$sql2 = mysql_query($sql) or die(mysql_error());
} 
 
 
?>
isa150183 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/05/2007, 23h21   #4
Membre chevronné
 
Avatar de Spoutnik
 
Homme
Inscription : octobre 2003
Messages : 668
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : Etats-Unis

Informations forums :
Inscription : octobre 2003
Messages : 668
Points : 746
Points : 746
Hello,

regarde de ce coté là :
Code :
1
2
3
4
5
 
INSERT INTO nuke_stories(colonne1[, colonne2])
SELECT champ1[, champ2]
FROM nuke_queue
[WHERE critères]
cf : http://dev.mysql.com/doc/refman/5.0/en/insert-select.html

(PS : je ne sais pas depuis quand cette commande est dispo sur MySQL)
__________________
Two beer or not two beer. (Shakesbeer)
Question technique par MP => poubelle!
Spoutnik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2007, 08h59   #5
Membre éclairé
 
Avatar de Asmodean
 
Inscription : février 2006
Messages : 311
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France

Informations forums :
Inscription : février 2006
Messages : 311
Points : 346
Points : 346
Envoyer un message via MSN à Asmodean
Tiens je ne connaissais pas ça , c'est d'ailleurs surement le meilleur moyen.

Sinon pour ton code isa le problème c'est que tu affectes ta variable Rowsql2 par un fetch_array mais qu'après tu utilise des variables, alors que c'est un tableau associatif :


à la place de


Par contre pour faire comme tu fais il existe une méthode si je me souviens bien c'est

Code php :
extract($monTableauAssociatif)

Qui te permet ensuite d'utiliser des variable portant les noms des clés du tableau.
Asmodean est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2007, 17h19   #6
Nouveau Membre du Club
 
Inscription : avril 2003
Messages : 201
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 201
Points : 31
Points : 31
Par défaut code php

Merci pour votre aide, voici mon code finalement mais il n'interprete pas les variables $rowsql2 ('".$Rowsql2['story']."') , il insert du vide au lieu de la variable, quelle est la syntaxe ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
 
<?
 
$db = mysql_connect('localhost', 'user', 'pass') or die(mysql_error());  
mysql_select_db('base',$db);  
 
$sql = "SELECT * from nuke_queue"; 
$sql2 = mysql_query($sql) or die(mysql_error()); 
 
while ($rowsql2 = mysql_fetch_assoc($sql2)) 
{ 
$sqli = "insert into nuke_stories values (NULL, '0', 'isa', '".$Rowsql2['subject']."', '".$Rowsql2['timestamp']."','".$Rowsql2['story']."','".$Rowsql2['storyext']."','0', '0', '".$Rowsql2['topic']."', '".$Rowsql2['uname']."','','0','', '0', '0','0', '0','0', '')"; 
$sql2i = mysql_query($sqli) or die(mysql_error());
 
echo "ok<br>";
} 
 
 
?>
merci
isa150183 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 08h19   #7
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 686
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 686
Points : 5 451
Points : 5 451
Salut

Je ne suis sûre de rien, mais il me semble que php est sensible à la casse en ce qui concerne les noms de variables...
Si c'est bien le cas, fais attention aux $Rowsql2['...'] et $rowsql2['...']
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 10h12   #8
Membre chevronné
 
Avatar de Spoutnik
 
Homme
Inscription : octobre 2003
Messages : 668
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : Etats-Unis

Informations forums :
Inscription : octobre 2003
Messages : 668
Points : 746
Points : 746
Si je peux me permettre un petit conseil, oublie les boucles, et fais avec la requete SQL que je t'ai donné (sauf peut être pour comparer ). Ca ira beaucoup plus rapidement!
Tu va lancer 2000X la même commande avec toutes les valeurs au lieu d'une seule ...
Code :
1
2
3
4
5
 
INSERT INTO nuke_stories(sid ,catid, aid, ............., associated ) // tu mets ici le nom de toutes les colonnes ou tu veux insérer qq chose
SELECT champ1[, champ2]// tu mets ici le nom des colonnes d'où tu veux extraire les données : l'ordre doit respecter celui de la ligne au dessus et il doit y avoir le même nombre de colonnes.
FROM nuke_queue
[WHERE critères] // critères de sélection des "lignes" de la table nuke_queue
Je ne peux pas t'aider plus que ca, toi seul sais quelle colonne prend quelle valeur avec quelle transfo ...

Pour aider au dvp de ce genre de requete :
Code :
1
2
3
4
 
SELECT champ1[, champ2]// tu mets ici le nom des colonnes d'où tu veux extraire les données : l'ordre doit respecter celui de la ligne au dessus et il doit y avoir le même nombre de colonnes.
FROM nuke_queue
[WHERE critères] // critères de sélection des "lignes" de la table nuke_queue
et tu rajoute la ligne
Code :
 INSERT INTO nuke_stories(sid ,catid, aid, ............., associated ) // tu mets ici le nom de toutes les colonnes ou tu veux insérer qq chose
quand ta requete te renvoi ce que tu veux.

++
__________________
Two beer or not two beer. (Shakesbeer)
Question technique par MP => poubelle!
Spoutnik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 16h16   #9
Nouveau Membre du Club
 
Inscription : avril 2003
Messages : 201
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 201
Points : 31
Points : 31
Par défaut merci

Merci pour votre aide

Voici la conclusion pour ceux qui auraient le même probleme que moi : trop de sujets à valider d'un coup dans un phpnuke:

pour passer les enregistrements de nuke_queue a nuke_stories

Code :
1
2
3
INSERT INTO nuke_stories(title, time,hometext,bodytext,topic,informant)
SELECT subject,timestamp, story, storyext,topic, uname
FROM nuke_queue;
Ne pas oublier de vider nuke_queue ensuite!
Merci!
isa150183 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 06h58.


 
 
 
 
Partenaires

Hébergement Web