• User Attivo

    Copia tabella su altra tabella

    Ciao ragazzi avrei un piccolo problema..dato ovviamente dalla mia poca esperienza in PHP!...vengo al sodo, vorrei copiare tramite script lato server una tabella del mio database su un'altra tabella dello stesso database, avente un nome diverso sia la tabella che il campo in esso e sto usando questo:
    <?php

    $db_host = "xxxxxxxxxxxxxx";
    $db_user = "xxxxxxxxxxxxxx";
    $db_password = "xxxxxxxxx";
    $db_database = "xxxxxxxxx";
    

    $db_connessione = mysql_connect($db_host, $db_user, $db_password) or die("Impossibile collegarsi al server MySQL.");
    mysql_select_db($db_database, $db_connessione)or die("Impossibile selezionare il database $db_database");
    $query = "INSERT INTO clienti(Email) SELECT email, state FROM fornitori WHERE email = NULL";
    mysql_close();

    ?>

    ma non funziona una cippa!...sapreste darmi qualche suggerimento?
    grazie anticipatamente Peter


  • User Attivo

    Esporti su file di testo e poi importi sulla nuova tabella con la query:
    LOAD DATA INFILE 'nomefile' INTO TABLE nometabella


  • User Attivo

    ...grazie della veloce risposta....ma mi stai dicendo qualcosa che sinceramente non saprei da dove cominciare!.....sapresti dirmi di più...magari con qualche esempio o qualche indirizzo con qualcosa di fatto?
    ...non se ho capito male, ma forse tu indendi farlo forse con phpadmin, ma io intendo farlo in automatico tramite script php, in modo che quando ci sono nuovi dati nella tabella come ad esmpio un nuovo indirizzo mail nel Email lui lo ricopia anche nel campo email di un'altra tabella, sempre dello stesso database.


  • User Attivo

    INSERT INTO table1 (field1,field3,field9)
    SELECT field3,field1,field4
    FROM table2;

    campi che inserisci in una devono essere in numero uguali a quelli dell'altra.
    "INSERT INTO clienti(Email) SELECT email FROM fornitori WHERE email != NULL"


  • User Attivo

    Purtroppo sembra ancora non funzionare, eppure i campi sono uguali, solo che uno si chiama "Email" e l'altro "email"....forse sbaglio nel metter l'ordine?

    <?php

    $db_host = "xxxxxxxxxxxxxx";
    $db_user = "xxxxxxxxxxxxxx";
    $db_password = "xxxxxxxxx";
    $db_database = "xxxxxxxxx";
    

    $db_connessione = mysql_connect($db_host, $db_user, $db_password) or die("Impossibile collegarsi al server MySQL.");
    mysql_select_db($db_database, $db_connessione)or die("Impossibile selezionare il database $db_database");

    $query = "INSERT INTO weborders_clienti(Email) SELECT email FROM weborders_users WHERE Email != NULL";

    $ri = mysql_db_query ( $db_database, $query, $db_connessione );

    if (!$ri) {

    echo "<h1>Errore durante l'inserimento dei dati nella tabella!</h1>";

    echo $query . mysql_error();
    mysql_close();

    }
    ?>

    ...vorrei sapere un'altra cosa ancora, ma i capi di una che devono essere uguali all'altra cosa significa?...che se in una tabella ho nome,cognome,eta anche nell'altra devo avere gli stessi?
    Scusa la mia ingoranza.....ma vorrei davvero capire. Ciao e grazie di nuovo Peter


  • User Attivo

    nulla da fare!..ho provato a creare le due tabelle "weborders_users" e "weborders_client" esattamente identiche poi ne ho popolata solo una e provato con il seguente:

    $query = "INSERT INTO weborders_clienti (email) SELECT email FROM weborders_users WHERE email!= NULL";

    quindi in poche parole ho due campi "email" identitici in tutte e due le tabelle e benchè lo script non mi da errore nell'altra tabella non trovo le email copiate!

    chissa forse prima o poi troveremo la soluzione. ciao Peter


  • User Attivo

    @peterminnow said:

    nulla da fare!..ho provato a creare le due tabelle "weborders_users" e "weborders_client" esattamente identiche poi ne ho popolata solo una e provato con il seguente:

    $query = "INSERT INTO weborders_clienti (email) SELECT email FROM weborders_users WHERE email!= NULL";

    quindi in poche parole ho due campi "email" identitici in tutte e due le tabelle e benchè lo script non mi da errore nell'altra tabella non trovo le email copiate!

    chissa forse prima o poi troveremo la soluzione. ciao Peter

    Questa dovrebbe funzionare
    INSERT INTO weborders_clienti (email) SELECT email FROM weborders_users WHERE email!=' '


  • User Attivo

    BRAVISSIMO!!! funziona..perfetto!

    ora pero ho ripristinato la tabella weborders_clienti che ha il nome dei campi diverso, come ad esempio quello della mail che è "Email" mentre quello della tabella weborderr_users è "email" e quando lancio lo script mi dà questo errore: INSERT INTO weborders_clienti (Email) SELECT email FROM weborders_users WHERE email!=' 'Duplicate entry '' for key 2
    e cmq però mi copia la prima email della lista weborders_users nella tabella weborders_clienti.

    cmq grazie per quanto fatto che non è poco, se hai altro tempo da dedicarmi ne sarò felice....ciao grazie Peter


  • User Attivo

    hai impostato qualche chiave nella tabella?


  • User Attivo

    @ienavr said:

    hai impostato qualche chiave nella tabella?

    -- Struttura della tabella weborders_clienti

    CREATE TABLE weborders_clienti (
    idCliente int(6) unsigned NOT NULL auto_increment,
    Nome tinytext NOT NULL,
    Cognome tinytext NOT NULL,
    NomeUtente varchar(16) NOT NULL default '',
    Password varchar(20) NOT NULL default '',
    PI_CF tinytext,
    Telefono varchar(20) default NULL,
    Email varchar(100) NOT NULL default '',
    Indirizzo tinytext,
    NCivico tinytext,
    Cap tinytext,
    Citta tinytext,
    Provincia tinytext,
    Societa tinytext,
    Consegna int(1) default '0',
    Pagamento int(1) default '0',
    Fattura int(1) default '0',
    Attivo int(1) unsigned default '1',
    PRIMARY KEY (idCliente),
    UNIQUE KEY NomeUtente (NomeUtente),
    FULLTEXT KEY Indirizzo (Indirizzo)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=391 ;

    questa è la tabella dove andrebbero copiati i dati della tabella weborders_users


  • User Attivo

    UNIQUE KEY NomeUtente (NomeUtente) significa che nella tabella non ci possono essere due utenti con lo stesso nome (anche se gli altri campi sono diversi). Nella tabella originale i nomi sono tutti distinti?


  • User Attivo

    la tabella weborders_users dove devo prendere i dati è per la cronaca la tabella di registrazione di Joomla:

    -- Struttura della tabella weborders_users

    CREATE TABLE weborders_users (
    id int(11) NOT NULL auto_increment,
    name varchar(50) NOT NULL default '',
    username varchar(25) NOT NULL default '',
    email varchar(100) NOT NULL,
    password varchar(100) NOT NULL default '',
    usertype varchar(25) NOT NULL default '',
    block tinyint(4) NOT NULL default '0',
    sendEmail tinyint(4) default '0',
    gid tinyint(3) unsigned NOT NULL default '1',
    registerDate datetime NOT NULL default '0000-00-00 00:00:00',
    lastvisitDate datetime NOT NULL default '0000-00-00 00:00:00',
    activation varchar(100) NOT NULL default '',
    params text NOT NULL,
    PRIMARY KEY (id),
    KEY usertype (usertype),
    KEY idx_name (name)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=190 ;


  • User Attivo

    nella tabella weborders_users ci possono essere 2 utenti con lo stesso username? scusa la domanda un po' idiota...


  • User Attivo

    ok! sembra che fino a qui ci siamo:

    $query = "INSERT INTO weborders_clienti (Nome,NomeUtente,Email,Password) SELECT name,username,email,password FROM weborders_users WHERE id!=' '";

    ora se io devo prendere qualche altro dato tipo "citta" "telefono" ecc. da anche un'altra tabella, quindi oltre a "weborders_users" anche da "weborders_comprofiler" come dovrei inserirla nella query?

    Un'altro piccolo problema è quello di non riscrivere dati gia esistenti!!!!!

    ciao e sempre grazie tantissimo da Peter


  • User Attivo

    scusa ma come hai risolto il problema di prima?

    ad ogni modo ora devi usare un join...


  • User Attivo

    scusa ma credo che non ho inviato il post ...cmq dicevo di aver eliminato sul DB la chiave UNIQUE KEY NomeUtente (NomeUtente)

    ora cmq il primo passo è quello di non riscrivere i dati due volte!


  • User Attivo

    non garantisco perchè non ho potuto testare...però è un tentativo...INSERT INTO weborders_clienti
    (Nome,NomeUtente,Email,Password)
    SELECT u.name,u.username,u.email,u.password
    FROM weborders_users AS u WHERE u.id!='' AND u.username
    IN ( SELECT DISTINCT username FROM weborders_users )


  • User Attivo

    No nulla!...li ripete come prima


  • User Attivo

    mi chiedevo se invece si potrebbe inserire sotto un'altra query che eliminasse i dati doppi nella cartella di destinazione "weborders_clienti"

    inoltre ho trovato questo:

      Oltre alla INSERT, MySQL offre l'istruzione **REPLACE**, che       è un'estensione allo standard SQL e che consente di sostituire le righe       preesistenti con le righe inserite qualora si verifichi una situazione di       chiave doppia. In pratica, usando REPLACE, qualora non sia possibile       inserire una riga perchè una PRIMARY KEY o un indice UNIQUE esistono già       sulla tabella, MySQL cancella la riga vecchia ed inserisce la nuova.       Questo comportamento è opposto a quello di INSERT IGNORE, con il quale è       la nuova riga ad essere scartata.
    
                Per effettuare una REPLACE dovremo avere i permessi di INSERT e DELETE;       le sintassi sono pressochè identiche a quelle della INSERT; vediamole:
    
    
            REPLACE [LOW_PRIORITY | DELAYED]
      [INTO] *nome_tabella* [(*nome_colonna*,...)]
      VALUES ({*espressione* | DEFAULT},...),(...),...
      **oppure**
      REPLACE [LOW_PRIORITY | DELAYED]
      [INTO] *nome_tabella*
      SET *nome_colonna*={*espressione* | DEFAULT}, ...
      **oppure**
      REPLACE [LOW_PRIORITY | DELAYED]
      [INTO] *nome_tabella* [(*nome_colonna*,...)]
      SELECT ...
    

    fonte: http://database.html.it/guide/lezione/2448/inserimento-dei-dati-nelle-tabelle/


  • User Attivo

    forse allora ti conveniva tenere la chiave unique su username ed utilizzare "insert ignore" invece di "insert"