Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
MySQL, problema in query complessa
lunedì 29 settembre 2008 - 13.56
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
squilibrio
Profilo
| Expert
527
messaggi | Data Invio:
lun 29 set 2008 - 13:56
Ciao a tutti, avrei bisogno del vostro per una query un po' incasinata
Ho due tabelle Master/Detail con un elenco di spedizioni e relativo dettaglio
CREATE TABLE `db`.`webspedizioni` (
`id` int(10) unsigned NOT NULL auto_increment,
`awb` varchar(20) NOT NULL,
`idCliente` int(10) unsigned NOT NULL,
`idWebRubrica` int(10) unsigned NOT NULL,
`destRagioneSociale` varchar(255) NOT NULL,
`destNazione` varchar(255) NOT NULL,
`destIndirizzo` varchar(255) NOT NULL,
`destComune` varchar(255) NOT NULL,
`destProvincia` varchar(255) NOT NULL,
`destCap` varchar(10) NOT NULL,
`destTelefono` varchar(255) NOT NULL,
`destEmail` varchar(255) NOT NULL,
`colli` int(10) unsigned NOT NULL,
`idServizio` int(10) unsigned NOT NULL,
`descrizione` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=238 DEFAULT CHARSET=latin1;
CREATE TABLE `db`.`webspedizionidettaglio` (
`id` int(10) unsigned NOT NULL auto_increment,
`idSpedizioni` int(10) unsigned NOT NULL,
`lunghezza` double NOT NULL,
`altezza` double NOT NULL,
`spessore` double NOT NULL,
`peso` double NOT NULL,
`pesoVolumetrico` double NOT NULL,
`k` double NOT NULL,
`numeroPacco` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `FK_webspedizionidettaglio_1` (`idSpedizioni`),
CONSTRAINT `FK_webspedizionidettaglio_1` FOREIGN KEY (`idSpedizioni`) REFERENCES `webspedizioni` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=415 DEFAULT CHARSET=latin1;
ed una tabella con l'elenco dei destinatari
CREATE TABLE `db`.`webmailingcontatti` (
`id` int(10) unsigned NOT NULL auto_increment,
`idMailing` int(10) unsigned NOT NULL,
`idRubrica` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=latin1;
partendo da un ID passato, corrispondente a webspedizioni.id di una spedizione appena creata (che ovviamente contiene sia master che detail),
voglio creare X spedizioni uguali (con master e detail uguale a quella dell'id passato) ma con X destinatari diversi,
recuperati dalla tabella webmailingcontatti (che verifica una condizione ma questo non è importante), vorrei inserire
la tabella webmailingcontatti si collega alla tabella dei destinatari tramite webmailingcontatti.idRubrica = webrubrica.id
CREATE TABLE `db`.`webrubrica` (
`id` int(10) unsigned NOT NULL auto_increment,
`idWebUtente` int(10) unsigned NOT NULL,
`ragioneSociale` varchar(200) default NULL,
`indirizzo` varchar(200) default NULL,
`cap` varchar(20) default NULL,
`contatto` varchar(200) default NULL,
`telefono` varchar(100) default NULL,
`fax` varchar(100) default NULL,
`email` varchar(200) default NULL,
`cellulare` varchar(100) default NULL,
`comune` varchar(200) default NULL,
`provincia` varchar(200) default NULL,
`nazione` varchar(200) default NULL,
`stato` varchar(200) default NULL,
`domicilioPrivato` tinyint(1) default NULL,
`alias` varchar(200) default NULL,
`piva` varchar(45) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1857 DEFAULT CHARSET=latin1 ROW_FORMAT=FIXED;
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
mar 30 set 2008 - 09:17
>partendo da un ID passato, corrispondente a webspedizioni.id
>di una spedizione appena creata (che ovviamente contiene sia
>master che detail),
>voglio creare X spedizioni uguali (con master e detail uguale
>a quella dell'id passato) ma con X destinatari diversi,
>recuperati dalla tabella webmailingcontatti (che verifica una
>condizione ma questo non è importante), vorrei inserire
E come fai a sapere quali sono gli X destinatari diversi ? Sono sempre gli stessi ?
Se non sono gli stessi come li passi ? Hai una Stored Procedure che esegue il compito o un layer applicativo ? (immagino di sì)
Ciao
David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/
squilibrio
Profilo
| Expert
527
messaggi | Data Invio:
mar 30 set 2008 - 15:48
Grazie per l'aiuto!!
Gli X destinatari li recupero dalla tabella
webmailingcontatti
in quando ho l'ID della "MailingList" selezionata .... quindi i destinatari sono quelli
Spero sia chiaro, io non so piu dove sbattere la testa con questa query!
squilibrio
Profilo
| Expert
527
messaggi | Data Invio:
mer 1 ott 2008 - 17:32
Nessun aiuto?? Io ho fatto altre prove ma sono sempre in alto mare
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
mer 1 ott 2008 - 23:42
>Nessun aiuto?? Io ho fatto altre prove ma sono sempre in alto
>mare
Ho capito vagamente. Allora potresti usare una query del tipo INSERT... SELECT qui documentata:
http://dev.mysql.com/doc/refman/5.0/en/insert-select.html
Questo ti consente di accodare una serie di righe in un'altra tabella.
Quindi tu potresti costruire la query principale joinando la prima spedizione con la distribution list a quel punto ti uscirano N nuove righe tanti quanti sono i contatti e quindi le spedizioni a quel punto fai la INSERT... SELECT di sta roba. Il risultato è che vai ad accodare N nuove spedizioni/righe nella tabella.
Per fare la INSERT...SELECT è necessario che le colonne e i tipi di dati corrispondano.
Ciao
David De Giacomi | <empty>
http://blogs.dotnethell.it/david/
squilibrio
Profilo
| Expert
527
messaggi | Data Invio:
gio 2 ott 2008 - 09:33
Grazie per l'aiuto!! Anche io avevo pensato alla SELECT + INSERT, quello che non riesco a fare è applicarla al mio problema!
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
gio 2 ott 2008 - 11:29
>Grazie per l'aiuto!! Anche io avevo pensato alla SELECT + INSERT,
>quello che non riesco a fare è applicarla al mio problema!
INSERT SELECT non SELECT INSERT
Ti consiglio prima di tutto di provare a mettere giù la query così come spiegato nel link di documentazione di MySQL. Ed eseguirla e intanto capire se funziona correttamente e viene inserita la riga.
Usa campi finti:
select 'alfa' as primocampo, 'beta' as secondo ecc.
Una volta appurato questo preparare il JOIN quando è pronto anche lui combini la prima parte e la seconda parte e dovresti ottenere ciò che vuoi.
Ciao
David De Giacomi | <empty>
http://blogs.dotnethell.it/david/
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !