Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2001
    Messaggi
    275

    copiare dati da tabelle diverse in database diversi

    salve a tutti
    volevo sapere qual è la sintassi corretta per copiare dati da una tabella A a una tabella B che si trovano su due database diversi (le tabelle non hanno la stessa struttura)
    in pratica, gli utenti si registrano alla newsletter e i dati vengono scritti sul database1
    ora vorrei che al momento della registrazione il campo email fosse copiato nella tabella b del database 2

    ho provato questo:


    INSERT INTO database2.phplist_user_user (email)
    SELECT email
    FROM database1.wp_snews_members


    phplist_user_user ha questa struttura:

    Codice PHP:
    CREATE TABLE `phplist_user_user` (
      `
    idint(11NOT NULL auto_increment,
      `
    emailvarchar(255NOT NULL,
      `
    confirmedtinyint(4) default '0',
      `
    blacklistedtinyint(4) default '0',
      `
    bouncecountint(11) default '0',
      `
    entereddatetime default NULL,
      `
    modifiedtimestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
      `
    uniqidvarchar(255) default NULL,
      `
    htmlemailtinyint(4) default '0',
      `
    subscribepageint(11) default NULL,
      `
    rssfrequencyvarchar(100) default NULL,
      `
    passwordvarchar(255) default NULL,
      `
    passwordchangeddate default NULL,
      `
    disabledtinyint(4) default '0',
      `
    extradatatext,
      `
    foreignkeyvarchar(100) default NULL,
      
    PRIMARY KEY  (`id`),
      
    UNIQUE KEY `email` (`email`),
      
    KEY `foreignkey` (`foreignkey`),
      
    KEY `idx_phplist_user_user_uniqid` (`uniqid`),
      
    KEY `emailidx` (`email`),
      
    KEY `enteredindex` (`entered`)
    ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=50 
    wp_snews_members ha questa struttura:

    Codice PHP:
    CREATE TABLE `wp_snews_members` (
      `
    idbigint(20unsigned NOT NULL auto_increment,
      `
    emailvarchar(100NOT NULL,
      `
    stateenum('active','waiting'NOT NULL,
      `
    joineddatetime NOT NULL,
      `
    userbigint(20unsigned default NULL,
      `
    confkeyvarchar(100) default NULL,
      
    UNIQUE KEY `id` (`id`)
    ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=34 
    ma non funziona
    la registrazione avviene solo sulla tabella del database1
    come posso fare?
    grazie

  2. #2
    la sintassi e' corretta. Dovresti mettere la condizione where altrimenti ti copia tutta la tabella

    piuttosto nella seconda tabella dovresti controllare il CREATE TABLE...

    [code]
    CREATE TABLE `wp_snews_members` (
    `id` bigint(20) unsigned NOT NULL auto_increment, -- < bigint mi pare eccessivo
    `email` varchar(100) NOT NULL,
    `state` enum('active','waiting') NOT NULL,
    `joined` datetime NOT NULL,
    `user` bigint(20) unsigned default NULL, -- < bigint mi pare eccessivo
    `confkey` varchar(100) default NULL,
    UNIQUE KEY `id` (`id`) -- mettilo come chiave primaria
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=34 ;

    forse e' la modalita' con cui lo esegui che non va

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2001
    Messaggi
    275
    ciao
    grazie per la risposta
    ora ho aggiunto il where così

    $query = "INSERT INTO Sql163792_3.phplist_user_user (email)
    SELECT email
    FROM Sql163792_1.wp_snews_members
    WHERE email IN ('$email')";

    e ho modificato la tabella così

    CREATE TABLE `wp_snews_members` (
    `id` bigint(20) unsigned NOT NULL auto_increment,
    `email` varchar(100) NOT NULL,
    `state` enum('active','waiting') NOT NULL,
    `joined` datetime NOT NULL,
    `user` bigint(20) unsigned default NULL,
    `confkey` varchar(100) default NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=39 ;

    ma ancora niente

  4. #4
    scusa... ma se hai il dato $email a che ti serve leggerlo nell'altro db? mettilo direttamente nella tua tabella.

    Mi pare inoltre che il solo dato email sia insufficiente se non e' collegato ad un id_user, a meno che tu non voglia usare l'email come campo comune ... cosa sicuramente poco ottimizzata.

    bigint e' eccessivo .... si riserva 8 byte per una capacita' di 18.446.744.073.709.550.615 manco riesco a leggerlo 'sto numero.... con un int occupi 4 byte per oltre 4 giga di valori possibili....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.