Notizia:
  • Rilasciata Precise Pangolin 12.04. Per ottenerla, visitate questa pagina, oppure provate il tour dal vivo con un browser web moderno.
  • Nuovo forum di Ubuntu-it, l'annuncio. È consigliato aggiornare il proprio profilo e controllare la sezione Gruppo Forum per problemi noti.
  • Rilasciata la versione italiana di Precise Pangolin 12.04. Per maggiori informazioni, consultare questa discussione.
  • Il vincitore del Concorso desktop del mese di aprile è Jerico. L'elenco dei precedenti vincitori è qui.
  • È uscito il numero 17 della Newsletter italiana di Ubuntu. Lo trovate a questo indirizzo.
  • È uscito il numero 59 di Full Circle Magazine in italiano. Lo trovate a questo indirizzo.

[RISOLTO][Mysql] incrociare i dati di due tabelle

Linguaggi di programmazione: php, perl, python, C, bash, ecc.

[RISOLTO][Mysql] incrociare i dati di due tabelle

Messaggioda follettinux » martedì 7 febbraio 2012, 1:37

Vorrei prelevare dei dati da una tabella ma per far ciò devo prendere un altor dato da un'altra tabella, mi spiego meglio:

tabella uno

cod          id
AB 1          1
AB 2          2
AC 1          3
...

tabella due

id             attributo
1              alpha
2              beta
3              alpha
...

Ora il mio obiettivo e cambiare l'attributo al record con id=2 nella seconda tabella. Non posso cambiarlo direttamente perché i dati mi vengono dati da un ciclo while. Un ostacolo aggiuntivo è dato dal fatto che io inizialemte non conosco il codice per intero ma solo le prime due lettere, in questo caso AB.
Dobbiamo proseguire da questo:
Codice: Seleziona tutto
$query="SELECT id FROM tabellauno WHERE cod LIKE 'AB%'";
$risultato=mysql_query($query);


Ora abbiamo però id, quello riferito ad AB 1 e quello riferito ad AB 2.  Sapendo che devo cambiare l'attibuto dell'AB che ha valore "beta" come faccio ad incrociare le tabelle?
Ultima modifica di follettinux il giovedì 9 febbraio 2012, 20:20, modificato 1 volta in totale.
follettinux
Prode Principiante
 
Messaggi: 244
Iscrizione: settembre 2010

Re: [Mysql] incrociare i dati di due tabelle

Messaggioda Zoff » martedì 7 febbraio 2012, 2:21

Ma non ti basta un JOIN?

Codice: Seleziona tutto
UPDATE tabella_uno AS t1 JOIN tabella_due AS t2 ON t1.id = t2.id
WHERE t1.cod LIKE 'AB%' AND t2.attributo = 'beta'
SET t2.attributo = 'quello che vuoi'
Ultima modifica di Zoff il martedì 7 febbraio 2012, 2:25, modificato 1 volta in totale.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
 
Messaggi: 24443
Iscrizione: ottobre 2007
Località: Romagna!!!
Distribuzione: Ubuntu 12.04
Desktop: Unity e Gnome Shell

Re: [Mysql] incrociare i dati di due tabelle

Messaggioda follettinux » mercoledì 8 febbraio 2012, 15:43

si infatti...
grazie zoff!
follettinux
Prode Principiante
 
Messaggi: 244
Iscrizione: settembre 2010

Re: [Mysql] incrociare i dati di due tabelle

Messaggioda follettinux » mercoledì 8 febbraio 2012, 21:11

Ho tolto risolto per non aprire un nuovo post, visot che è lo stesso problema modificato.


ripensandoci metto il problema per intero.

abbiamo 2 tabelle, la prima elenca il codice dell'elemento, la seconda attribuisce il nome e valore degli attributi relativi all'id

tabella1

id           codice
...           ...
425        aaa duh
434        aaa des
454        aaa wer
460        aaa tiu
461        aaa sse
463        aaa pop
478        aaa edf
...           ...

tabella 2

id           nome-attr   valore-attr
...           ...
425        colore         rosso
425        peso           leggero
434        colore         verde
434        peso           leggero
454        colore         nero
454        peso           leggero
460        colore         rosso
460        peso           pesante
461        colore         verde
461        peso           pesante
463        colore         nero
463        peso           pesante
478        
...           ...


il problema è partendo dalle iniziali del codice ricavare il codice completo sapendo i valori degli attributi.

Esempio:
voglio sapere il codice completo che inizia per "aaa" e che ha come attributi colore=nero peso=leggero
In questo caso la soluzione è l'elemento che ha come id "454" e codice "aaa wer"

Ora vorrei capire come arrivare a sapere il codice completo sapendo solo le iniziali e i valori degli attributi...
Ultima modifica di follettinux il mercoledì 8 febbraio 2012, 21:13, modificato 1 volta in totale.
follettinux
Prode Principiante
 
Messaggi: 244
Iscrizione: settembre 2010

Re: [Mysql] incrociare i dati di due tabelle

Messaggioda Zoff » giovedì 9 febbraio 2012, 0:25

Esattamente come per l'UPDATE:

Codice: Seleziona tutto
SELECT t1.codice
FROM tabella_1 AS t1 JOIN tabella_2 AS t2 ON  t1.id = t2.id
WHERE t2.nome-attr = "nero" AND t2.valore-attr = "leggero" AND t1.codice LIKE "aaa%"
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
 
Messaggi: 24443
Iscrizione: ottobre 2007
Località: Romagna!!!
Distribuzione: Ubuntu 12.04
Desktop: Unity e Gnome Shell

Re: [Mysql] incrociare i dati di due tabelle

Messaggioda follettinux » giovedì 9 febbraio 2012, 18:24

Zoff ha scritto:Esattamente come per l'UPDATE:

Codice: Seleziona tutto
SELECT t1.codice
FROM tabella_1 AS t1 JOIN tabella_2 AS t2 ON  t1.id = t2.id
WHERE t2.nome-attr = "nero" AND t2.valore-attr = "leggero" AND t1.codice LIKE "aaa%"



aspetta, c'è un errore. hai messo nome_attr="nero" ma non è un nome attributo bensì un valore attributo. Quindi usando solo questo non posso prelevare l'unico id che ha i valore_attr che cerco.

Se noti bene nella seconda tabella il colore ed il peso sono su due righe diverse e non sulla stessa!
follettinux
Prode Principiante
 
Messaggi: 244
Iscrizione: settembre 2010

Re: [Mysql] incrociare i dati di due tabelle

Messaggioda Zoff » giovedì 9 febbraio 2012, 18:26

Sì sì ma si tratta di cambiar eun valore. Non vorrai mica tutte le query belle e pronte? Cosa impari se no?
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
 
Messaggi: 24443
Iscrizione: ottobre 2007
Località: Romagna!!!
Distribuzione: Ubuntu 12.04
Desktop: Unity e Gnome Shell

Re: [Mysql] incrociare i dati di due tabelle

Messaggioda follettinux » giovedì 9 febbraio 2012, 18:30

Zoff ha scritto:Sì sì ma si tratta di cambiar eun valore. Non vorrai mica tutte le query belle e pronte? Cosa impari se no?

Sì, sono d'accordo con te però qui il problema è diverso. non posos utilizzare solo questa query
follettinux
Prode Principiante
 
Messaggi: 244
Iscrizione: settembre 2010

Re: [Mysql] incrociare i dati di due tabelle

Messaggioda follettinux » giovedì 9 febbraio 2012, 19:28

Esiste un operatore inverso a UNION? in questo modo potrei risolver eil tutto così:

Codice: Seleziona tutto
SELECT t1.codice
FROM tabella_1 AS t1 JOIN tabella_2 AS t2 ON  t1.id = t2.id
WHERE t2.nome-attr = "nero"  AND t1.codice LIKE "aaa%"
(operatore inverso di UNION)
SELECT t1.codice
FROM tabella_1 AS t1 JOIN tabella_2 AS t2 ON  t1.id = t2.id
WHERE t2.valore-attr = "leggero" AND t1.codice LIKE "aaa%"


ECCO.. in questo modo troveri l'id unico

Ma esiste un operatore del genere?
follettinux
Prode Principiante
 
Messaggi: 244
Iscrizione: settembre 2010

Re: [Mysql] incrociare i dati di due tabelle

Messaggioda Zoff » giovedì 9 febbraio 2012, 19:42

puoi fare:

Codice: Seleziona tutto
SELECT t1.codice
FROM tabella_1 AS t1 JOIN tabella_" AS t2 ON t1.id = t2.id
WHERE t2.nome-attr = "peso"
AND t2.valore-attr = "leggero"
AND t1.codice LIKE "aaa%"
AND t2.id IN ( SELECT id FROM tabella_2 WHERE nome-attr = "colore" AND valore-attr = "nero" )
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
 
Messaggi: 24443
Iscrizione: ottobre 2007
Località: Romagna!!!
Distribuzione: Ubuntu 12.04
Desktop: Unity e Gnome Shell

Re: [Mysql] incrociare i dati di due tabelle

Messaggioda follettinux » giovedì 9 febbraio 2012, 20:02

acc... mi da questo errore

Codice: Seleziona tutto
#1241 - Operand should contain 1 column(s)


Forse perché ho usato "SELECT *"?
Ultima modifica di follettinux il giovedì 9 febbraio 2012, 20:04, modificato 1 volta in totale.
follettinux
Prode Principiante
 
Messaggi: 244
Iscrizione: settembre 2010

Re: [Mysql] incrociare i dati di due tabelle

Messaggioda follettinux » giovedì 9 febbraio 2012, 20:20

Zoff sei un grande!

funziona benissimo!!!

grazie mille!

[RISOLTO]
follettinux
Prode Principiante
 
Messaggi: 244
Iscrizione: settembre 2010


Torna a Programmazione

Chi c’è in linea

Visualizzano questa pagina: crap0101, SuperStep e 5 ospiti