Pagina 1 di 1
[MYSQL] creazione tabella - uno a molti
Inviato: giovedì 24 aprile 2014, 22:58
da treled
Salve, sto ancora in mare alto.. per la questione dei tag cloud ..
ora mi serve fare una tabella con relazione n a molti.
ho trovato questo sito:
http://web.tiscalinet.it/programmazione/relazioni.htm#uno
ma come faccio per fare quello che vorrei fare io?
tab: tag
tab: news con campo tags varchar(255)
idee come realizzare questo coso.?
Re: [MYSQL] creazione tabella - uno a molti
Inviato: giovedì 24 aprile 2014, 23:01
da treled
esempio : fornitori ... nel mio caso sarebbe i tags e prodotti sarebbe news ?
giusto?
Re: [MYSQL] creazione tabella - uno a molti
Inviato: giovedì 24 aprile 2014, 23:26
da Zoff
Ma i tag sono anche chiavi di tabella? Perché se non è così non ti serve una relazione uno a monti ma una molti a molti, cioé una news può avere piu' tag e un tag può essere utilizzato in piu' news.
Io farei 3 tabelle così:
1) TAGS ( id:INTEGER, tag:VARCHAR(255) )
2) NEWS ( id:INTEGER, ....altri campi.... )
3) NEWS_TAGS( id_tag:INTEGER, id_news:INTEGER) con entrambi gli id FK sulle altre tabelle
Realizzabile con:
Codice: Seleziona tutto
CREATE TABLE IF NOT EXISTS `NEWS` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`campo1` varchar(255) NOT NULL,
`campo2` varchar(255) NOT NULL,
`campo3` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `NEWS_TAGS` (
`id_news` int(11) NOT NULL,
`id_tag` int(11) NOT NULL,
PRIMARY KEY (`id_news`,`id_tag`),
KEY `FK_TAGS` (`id_tag`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `TAGS` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`tag` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
ALTER TABLE `NEWS_TAGS`
ADD CONSTRAINT `FK_TAGS` FOREIGN KEY (`id_tag`) REFERENCES `TAGS` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `FK_NEWS` FOREIGN KEY (`id_news`) REFERENCES `NEWS` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
Re: [MYSQL] creazione tabella - uno a molti
Inviato: venerdì 25 aprile 2014, 12:05
da treled
ciao, e grazie mille .. appena ho tempo libero provo. Ora devo andare via.
prima di sera provo e poi ti faccio sapere.
Re: [MYSQL] creazione tabella - uno a molti
Inviato: venerdì 25 aprile 2014, 16:31
da treled
ok, sto provando.. volevo dire una cosa, per l'inserimento o modifica..
io uso un input=type text , come devo fare?
grazie mille.
Re: [MYSQL] creazione tabella - uno a molti
Inviato: venerdì 25 aprile 2014, 19:16
da Zoff
Che c'entrano gli input con una relazione sql?
Re: [MYSQL] creazione tabella - uno a molti
Inviato: venerdì 25 aprile 2014, 21:37
da treled
dicevo come faccio inserire i tag alle notizie in un form di inserimento?
ti ringrazio molto.
buona serata.
Re: [MYSQL] creazione tabella - uno a molti
Inviato: venerdì 25 aprile 2014, 21:41
da treled
ho provato ad inserire i sql nel mio phpmyadmin questo:
Codice: Seleziona tutto
CREATE TABLE IF NOT EXISTS `NEWS_TAGS` (
`id_news` int(11) NOT NULL,
`id_tag` int(11) NOT NULL,
PRIMARY KEY (`id_news`,`id_tag`),
KEY `FK_TAGS` (`id_tag`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `TAGS` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`tag` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
ALTER TABLE `NEWS_TAGS`
ADD CONSTRAINT `FK_TAGS` FOREIGN KEY (`id_tag`) REFERENCES `TAGS` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `FK_NEWS` FOREIGN KEY (`id_news`) REFERENCES `NEWS` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
essendo che news c'è lo già inserito ma mi restituisce:
Codice: Seleziona tutto
Errore
Query SQL:
ALTER TABLE `NEWS_TAGS`
ADD CONSTRAINT `FK_TAGS` FOREIGN KEY (`id_tag`) REFERENCES `TAGS` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `FK_NEWS` FOREIGN KEY (`id_news`) REFERENCES `NEWS` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
Messaggio di MySQL: Documentazione
#1215 - Cannot add foreign key constraint
che vuol dire?
Re: [MYSQL] creazione tabella - uno a molti
Inviato: venerdì 25 aprile 2014, 22:07
da Bianco95
prova questo:
Codice: Seleziona tutto
CREATE TABLE IF NOT EXISTS `NEWS` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`campo1` varchar(255) NOT NULL,
`campo2` varchar(255) NOT NULL,
`campo3` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `TAGS` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`tag` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `NEWS_TAGS` (
`id_news` int(11) NOT NULL,
`id_tag` int(11) NOT NULL,
PRIMARY KEY (`id_news`,`id_tag`),
FOREIGN KEY (`id_news`) REFERENCES `NEWS` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`id_tag`) REFERENCES `TAGS` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Re: [MYSQL] creazione tabella - uno a molti
Inviato: venerdì 25 aprile 2014, 22:19
da treled
ok, cosi è entrato nel sistema:
Codice: Seleziona tutto
CREATE TABLE IF NOT EXISTS `tags` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`tag` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `news_tags` (
`id_news` int(11) NOT NULL,
`id_tag` int(11) NOT NULL,
PRIMARY KEY (`id_news`,`id_tag`),
FOREIGN KEY (`id_news`) REFERENCES `NEWS` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`id_tag`) REFERENCES `TAGS` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
anche se io ho cambiato alcune cose, tipo l'engine.. che l'host vuole usare myisam invece di innodb.
per l'inserimento con la form come sarebbe la questione ?
riprendo domani pomeriggio ..
buona serata.
Re: [MYSQL] creazione tabella - uno a molti
Inviato: venerdì 25 aprile 2014, 22:27
da treled
dico che posso fare : #cani #gatti #uccellini #rettili ..
etc..
idee?
Re: [MYSQL] creazione tabella - uno a molti
Inviato: venerdì 25 aprile 2014, 22:58
da Zoff
Continuo a non capire.
Se la questione relazione sql è conclusa apri un altra discussione