- Home
- Categorie
- Coding e Sistemistica
- Coding
- Copia tabella su altra tabella
-
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/
-
forse allora ti conveniva tenere la chiave unique su username ed utilizzare "insert ignore" invece di "insert"
-
Ok ora provo
-
@peterminnow said:
Ok ora provo
è tutto ok con questa:$query = "INSERT IGNORE INTO weborders_clienti (idCliente,Nome,NomeUtente,Email,Password) SELECT id,name,username,email,password FROM weborders_users WHERE id!=' '";
ora come ultimo problema come dicevo prima è prendere qualche dato anche da un'altra tabella "weborders_comprofiler" da inserire sempre nella tabella "weborders_clienti"
oltre a rigraziarti davvero tantissimo, vorrei darti ovviamente, dopo tanto lavoro, il motivo per il quale mi serve di replicare alcuni dati di _users e _comprofiler in _clienti, il quale è che quella tabella viene letta da un software (chiuso) non modificabile!
ciao..nel frattempo continuo a trovare soluzione per quanto sopra......ma se hai tempo sicuramente la soluzione se tu!
-
se mi dici qual è la chiave che accomuna i campi delle due tabelle ti scrivo il codice
-
La tabella weborders_clienti
Nome,Cognome,NomeUtente,Password,PI_CF,Telefono,Email,Indirizzo,NCivico,Cap,Citta,Provincia,Societa,Consegna,Pagamento,Fattura,Attivo
La tabella weborders_users
name,username,email,block
La tabella weborders_comprofiler
lastname, firstname,cb_picf,cb_telefono,cb_indirizzo,cb_cap,cb_citta,cb_provincia,cd_societa,cb_fattura,cb_consegna,cb_pagamenti
-
ci deve essere un campo comune alle 2 tabelle cmprofiler e users per poter fare un join...cioè un campo che identifichi univocamente uno stesso utente (ad esempio) in entrambe le tabelle
-
si hai ragione la tabella "weborders_users" ha un id con stessa numerazione dell'**id **nella tabella "weborders_comprofiler"
inoltre questa ultima tabella ha anche un campo di nome **user_id **che riporta la stessa nemerazione dei precedenti **id
**a cosa potrebbe servire a Jooomla questo non lo so!
-
se ho capito bene ti serve una cosa del genere:
$query = "INSERT IGNORE INTO weborders_clienti (idCliente,Nome,NomeUtente,Email,Password,Indirizzo) SELECT u.id,name,u.username,u.email,u.password,c.cb_indirizzo FROM weborders_users AS u INNER JOIN weborders_comprofiler AS c ON u.id = c.id WHERE u.id!=' '";
questa è la struttura e credo vada bene...poi la devi personalizzare chiaramente
-
ora provo...a costo di stare qui fino a domani mattina!!!
-
allora non ci sono errori....ma cio che si trova su weborders_users viene riportaro correttamente come prima, mentre ad esempio l'indirizzo che si trova in weborders_comprofiler no...l'unica chiamata che si trova qui (idCliente,Nome,NomeUtente,Email,Password,Indirizzo)
annullo tutto okok.....ho sbagliato io sembra ok....ora vado avanti con la personalizzazione
-
TUTTO PERFETTO!!!
forse una cosa che si potrebbe fare è l'aggiornamento dei dati...qualora l'utente (tramita la modifica del profilo in Joomla) modifica i suoi dati
-
ottimo...per l'update credo che si possa fare...
-
ok...prendiamoci la pausa, la notte porta consiglio!!...ti sono veramente riconoscente, è tutto perfetto!!
-
Tutto Ok, questa è la query definitiva provata e funzionante:
$query = "INSERT IGNORE INTO weborders_clienti (idCliente,Nome,Cognome,NomeUtente,Password,PI_CF,Telefono,Email,Indirizzo,NCivico,Cap,Citta,Provincia,Societa,Consegna,Pagamento,Fattura,Attivo) SELECT u.id,c.firstname,c.lastname,u.username,u.password,c.cb_picf,c.cb_telefono,u.email,c.cb_indirizzo,c.cb_numerocivico,c.cb_cap,c.cb_citta,c.cb_provincia,c.cb_societa,c.cb_consegna,c.cb_pagamenti,c.cb_fattura,c.confirmed FROM weborders_users AS u INNER JOIN weborders_comprofiler AS c ON u.id = c.id WHERE u.id!=' '";
...se abbiamo tempo e soluzione per fare l'UPDATE come dicevamo diventerebbe perfetta!!
Una cosa volevo chidere: la lettera u e la lettera **c **come sono saltate fuori?
-
Sono venute fuori da questo pezzo qui:
FROM weborders_users AS u INNER JOIN weborders_comprofiler AS c
AS significa ALIAS...ossia scrivendo weborder_users AS u io assegno un nome alternativo (in questo caso u) a weborder_users. Così facendo posso scrivere in modo più comodo e leggibile la query.
Avrei anche potuto non usare l'alias, ma in tal caso mi sarei ritrovato a scrivere:
$query = "INSERT IGNORE INTO weborders_clienti (idCliente,Nome,Cognome,NomeUtente,Password,PI_CF, Telefono,Email,Indirizzo,NCivico,Cap,Citta,Provinc ia,Societa,Consegna,Pagamento,Fattura,Attivo) SELECT weborder_users.id,weborder_comprofiler.firstname,weborder_comprofiler.lastname,weborder_users.username,weborder_users.password.....
capisci che è scomodo e poco chiaro
-
direi che con MSYQL ci giochi a PALLONE!
...mi basterebbe 1/4 dei tuoi PALLEGGI!!!
-
Avrei trovato qualcosa quì
http://guide.dada.net/database/interventi/2001/05/45041.shtml
...ma non riesco!
sto facendo una prova con questo...ma ovviamente non funziona!
$query = "UPDATE weborders_clienti SET Email = SELECT email FROM weborders_users WHERE id!=' '";
-
$query = "UPDATE weborders_clienti SET Email = (SELECT email FROM weborders_users WHERE id!=' ')";
così è già più corretta ma devi anche dirgli dove fare l'update però
se vuoi fare l'update su tutte le righe usa REPLACE
-
infatti l'errore che mi torna è questo:
UPDATE weborders_clienti SET Email = (SELECT email FROM weborders_users WHERE id!=' ')Subquery returns more than 1 row
stesso errore con REPLACE
REPLACE weborders_clienti SET Email = (SELECT email FROM weborders_users WHERE id!=' ')Subquery returns more than 1 row