[MYSQL] creazione tabella - uno a molti

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
treled
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1331
Iscrizione: lunedì 26 aprile 2010, 17:36
Desktop: gnome
Distribuzione: ubuntu 23.04/22.04
Sesso: Maschile
Località: Massa(MS)

[MYSQL] creazione tabella - uno a molti

Messaggio 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.?
treled
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1331
Iscrizione: lunedì 26 aprile 2010, 17:36
Desktop: gnome
Distribuzione: ubuntu 23.04/22.04
Sesso: Maschile
Località: Massa(MS)

Re: [MYSQL] creazione tabella - uno a molti

Messaggio da treled »

esempio : fornitori ... nel mio caso sarebbe i tags e prodotti sarebbe news ?

giusto?
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [MYSQL] creazione tabella - uno a molti

Messaggio 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;
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
treled
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1331
Iscrizione: lunedì 26 aprile 2010, 17:36
Desktop: gnome
Distribuzione: ubuntu 23.04/22.04
Sesso: Maschile
Località: Massa(MS)

Re: [MYSQL] creazione tabella - uno a molti

Messaggio da treled »

ciao, e grazie mille .. appena ho tempo libero provo. Ora devo andare via.
prima di sera provo e poi ti faccio sapere.
treled
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1331
Iscrizione: lunedì 26 aprile 2010, 17:36
Desktop: gnome
Distribuzione: ubuntu 23.04/22.04
Sesso: Maschile
Località: Massa(MS)

Re: [MYSQL] creazione tabella - uno a molti

Messaggio 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.
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [MYSQL] creazione tabella - uno a molti

Messaggio da Zoff »

Che c'entrano gli input con una relazione sql?
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
treled
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1331
Iscrizione: lunedì 26 aprile 2010, 17:36
Desktop: gnome
Distribuzione: ubuntu 23.04/22.04
Sesso: Maschile
Località: Massa(MS)

Re: [MYSQL] creazione tabella - uno a molti

Messaggio da treled »

dicevo come faccio inserire i tag alle notizie in un form di inserimento?

ti ringrazio molto.
buona serata.
treled
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1331
Iscrizione: lunedì 26 aprile 2010, 17:36
Desktop: gnome
Distribuzione: ubuntu 23.04/22.04
Sesso: Maschile
Località: Massa(MS)

Re: [MYSQL] creazione tabella - uno a molti

Messaggio 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?
Avatar utente
Bianco95
Prode Principiante
Messaggi: 31
Iscrizione: venerdì 25 aprile 2014, 21:29
Desktop: Unity
Distribuzione: Ubuntu 14.04 x86_64
Località: Susegana (Treviso)

Re: [MYSQL] creazione tabella - uno a molti

Messaggio 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;

Work Hard Dream Big
Dopo le ere della pietra, del ferro... è giunta l'era di Linux.
treled
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1331
Iscrizione: lunedì 26 aprile 2010, 17:36
Desktop: gnome
Distribuzione: ubuntu 23.04/22.04
Sesso: Maschile
Località: Massa(MS)

Re: [MYSQL] creazione tabella - uno a molti

Messaggio 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.
treled
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1331
Iscrizione: lunedì 26 aprile 2010, 17:36
Desktop: gnome
Distribuzione: ubuntu 23.04/22.04
Sesso: Maschile
Località: Massa(MS)

Re: [MYSQL] creazione tabella - uno a molti

Messaggio da treled »

dico che posso fare : #cani #gatti #uccellini #rettili ..

etc..

idee?
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [MYSQL] creazione tabella - uno a molti

Messaggio da Zoff »

Continuo a non capire.
Se la questione relazione sql è conclusa apri un altra discussione
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti