IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[SQL] Requete insert into


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Par défaut [SQL] Requete insert into
    Bonjour
    J'ai une table avec 2000 enregistrements structure suivante :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $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);

  2. #2
    Membre chevronné Avatar de Asmodean
    Profil pro
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    Par défaut
    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).

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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());
    } 
     
     
    ?>

  4. #4
    Membre émérite Avatar de Spoutnik
    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 672
    Par défaut
    Hello,

    regarde de ce coté là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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)

  5. #5
    Membre chevronné Avatar de Asmodean
    Profil pro
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    extract($monTableauAssociatif)

    Qui te permet ensuite d'utiliser des variable portant les noms des clés du tableau.

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    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)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  8. #8
    Membre émérite Avatar de Spoutnik
    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 672
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
     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.

    ++

  9. #9
    Membre éclairé
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL] requete INSERT INTO ne marche pas
    Par mimagyc dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 07/08/2007, 11h48
  2. Requete INSERT INTO
    Par cheers94wow dans le forum Requêtes
    Réponses: 1
    Dernier message: 10/05/2006, 11h13
  3. [SQL] requete INSERT possible?
    Par clad523 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 03/08/2005, 15h42
  4. petite aide sur une requete INSERT INTO
    Par bonneti dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/03/2005, 15h17
  5. Erreur lors d'une requete insert into.. select
    Par Mr N. dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 04/11/2004, 17h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo