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