[MYSQL] update e join

Area di discussione libera.

Moderatore: Staff

Regole del forum
1) Rispettare le idee altrui.
2) Evitare le offese dirette.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
tiferet
Linux 1.x
Linux 1.x
Messaggi: 103
Iscritto il: sab 29 apr 2006, 0:25
Slackware: 13.1 (x86_64)
Kernel: 2.6.33.4
Desktop: KDE 4.4.3

[MYSQL] update e join

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

Avatar utente
masalapianta
Iper Master
Iper Master
Messaggi: 2775
Iscritto il: lun 25 lug 2005, 0:00
Nome Cognome: famoso porco
Kernel: uname -r
Desktop: awesome
Distribuzione: Debian
Località: Roma
Contatta:

Re: [MYSQL] update e join

Messaggio da masalapianta »

non si capisce quel che vuoi fare (ma mi pare di intuire che quel che cerchi siano le foreign keys)

Avatar utente
tiferet
Linux 1.x
Linux 1.x
Messaggi: 103
Iscritto il: sab 29 apr 2006, 0:25
Slackware: 13.1 (x86_64)
Kernel: 2.6.33.4
Desktop: KDE 4.4.3

Re: [MYSQL] update e join

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

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: [MYSQL] update e join

Messaggio 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

Avatar utente
masalapianta
Iper Master
Iper Master
Messaggi: 2775
Iscritto il: lun 25 lug 2005, 0:00
Nome Cognome: famoso porco
Kernel: uname -r
Desktop: awesome
Distribuzione: Debian
Località: Roma
Contatta:

Re: [MYSQL] update e join

Messaggio 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

Avatar utente
tiferet
Linux 1.x
Linux 1.x
Messaggi: 103
Iscritto il: sab 29 apr 2006, 0:25
Slackware: 13.1 (x86_64)
Kernel: 2.6.33.4
Desktop: KDE 4.4.3

Re: [MYSQL] update e join

Messaggio da tiferet »

ok, grazie! usare la subquery mi sembra la cosa migliore!

Rispondi