Pagina 1 di 1

[MYSQL] update e join

Inviato: mer 29 lug 2009, 11:05
da tiferet
Salve a tutti!

la domanda è un po' complessa, cercherò di essere chiaro. Ho due tabelle, una (PRODOTTI) contenente un elenco di prodotti, l'altra (GENERI) contenente le tipologie di generi che i prodotti possono avere. Poniamo una corrispondenza univoca, cioè un prodotto, un solo genere. Poniamo anche che le chiavi primarie di entrambe le tabelle siano numeriche autogenerate.

Vorrei potere stabilire un join fra queste due tabelle in modo tale che, quando faccio un update dei dati, possa inserire direttamente il nome del genere lasciando a MySQL il compito di tradurre il genere nel suo id e quindi impostare il valore numerico corretto nella tabella PRODOTTI. È possibile o sono costretto a tenere sempre un prontuario sottomano per ricordare il codice numerico di ciascun genere?

Re: [MYSQL] update e join

Inviato: mer 29 lug 2009, 12:02
da masalapianta
non si capisce quel che vuoi fare (ma mi pare di intuire che quel che cerchi siano le foreign keys)

Re: [MYSQL] update e join

Inviato: mer 29 lug 2009, 12:44
da tiferet
masalapianta ha scritto:non si capisce quel che vuoi fare (ma mi pare di intuire che quel che cerchi siano le foreign keys)
mmm, lo temevo

Allora, spiegazione pseudo grafica:
tabella 1:

Codice: Seleziona tutto

+----------+------------+----------+
| prod_id  | prodotto   | genre_id |
+----------+------------+----------+
| 1        | scatola    |        0 |
| 2        | vaso       |        0 |
| 3        | polistirolo|        0 |
+----------+------------+----------+
tabella 2:

Codice: Seleziona tutto

+----------+------------+
| genre_id | genre      |
+----------+------------+
| 1        | protezione |
| 2        | imballaggio|
| 3        | merce      |
+----------+------------+
l'associazione è: scatola -> imballaggio, vaso -> merce, polistirolo -> protezione. Ricordando a memoria i genre_id potrei fare:

Codice: Seleziona tutto

UPDATE tabella_1
SET genre_id = 1 WHERE prodotto = "polistirolo";
mentre io vorrei fare qualcosa del tipo:

Codice: Seleziona tutto

UPDATE tabella_1
SET genre = "protezione" WHERE prodotto = "polistirolo";
ovviamente l'istruzione è sbagliata e non funzionerebbe nè ora nè mai, ma spero di essermi spiegato...

Re: [MYSQL] update e join

Inviato: mer 29 lug 2009, 13:23
da conraid
se il db è già fatto e non hai messo foreign keys o altro, la prima cosa che mi viene in mente per usare il "nome" del genere è

Codice: Seleziona tutto

UPDATE tabella_1 SET genre_id = (SELECT genre_id FROM tabella_2 WHERE genre = "protezione" ) WHERE prodotto = "polistirolo";
ma naturalmente si potrà ottimizzare e semplificare in vari modi

Re: [MYSQL] update e join

Inviato: mer 29 lug 2009, 15:39
da masalapianta
ok, avevo capito intendessi un'altra cosa quindi le foreign keys in questo caso non ti servono, ma ti basta utilizzare una subquery come ti ha proposto conraid

Re: [MYSQL] update e join

Inviato: mer 29 lug 2009, 16:24
da tiferet
ok, grazie! usare la subquery mi sembra la cosa migliore!