Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

MySql query su tre tabelle

Linguaggi e sistemi

Moderatori: Foto UtentePaolino, Foto Utentefairyvilje

0
voti

[1] MySql query su tre tabelle

Messaggioda Foto UtenteDaniele78 » 14 mag 2010, 10:58

Salve!
Dovrei realizzare una query per estrarre informazioni sulle pratiche presenti nel db.
Ho una tabella contenente il nome delle pratiche con l' id del cliente a cui si riferisce e l' id dell' operatore che ha effettuato l' inserimento (come in figura).
Altre 2 tabelle associano una l' id_operatore(pr. key) al nome_operatore, l' altra l' id_cliente(pr. key) al nome_cliente.

La query dovrebbe restituirmi una tabella con l' elenco delle pratiche presenti, visualizzando per ciascuna nome_cliente e nome dell' operatore che ne ha effettuato l' inserimento.

Io non ho proprio idea di come si faccia spero possiate essermi di aiuto.
Grazie!
Allegati
tabella.JPG
tabella.JPG (19.07 KiB) Osservato 4172 volte
Avatar utente
Foto UtenteDaniele78
290 2 9
Expert
Expert
 
Messaggi: 288
Iscritto il: 9 set 2008, 23:07

0
voti

[2] Re: MySql query su tre tabelle

Messaggioda Foto Utentelucbie » 14 mag 2010, 11:54

Insomma, devi fare una JOIN:
http://dev.mysql.com/doc/refman/5.0/en/join.html

Non so i nomi delle tue tabelle, però dovrai fare qualcosa di questo tipo:
Codice: Seleziona tutto
SELECT nome_pratica, nome_cliente, nome_operatore
FROM tabella_pratiche
INNER JOIN tabella_clienti
ON tabella_pratiche.idcliente=tabella_clienti.idcliente
INNER JOIN tabella_operatori
ON tabella_pratiche.id_op=tabella_operatori.id_op
Avatar utente
Foto Utentelucbie
85 1 3 7
Expert EY
Expert EY
 
Messaggi: 676
Iscritto il: 9 dic 2009, 21:18
Località: Brianza

0
voti

[3] Re: MySql query su tre tabelle

Messaggioda Foto UtenteDaniele78 » 14 mag 2010, 12:26

Questa è la query modificata con i nomi delle mie tabelle:

Codice: Seleziona tutto
SELECT nome_pratica, nome, nome_op
FROM pratica
INNER JOIN schedacliente
ON pratica.idcliente=schedacliente.idcliente
INNER JOIN anag_operatori
ON pratica.id_op=anag_operatori.id_op;


Mi restituisce una tabella con solo le 3 pratiche che hanno idcliente=19
Avatar utente
Foto UtenteDaniele78
290 2 9
Expert
Expert
 
Messaggi: 288
Iscritto il: 9 set 2008, 23:07

0
voti

[4] Re: MySql query su tre tabelle

Messaggioda Foto UtenteDaniele78 » 14 mag 2010, 13:02

Scusami. Non funziona perché ho cancellato quei clienti dalla tabella schedaclienti. Adesso li reinserisco e ti farò sapere.
Grazie ancora.
Avatar utente
Foto UtenteDaniele78
290 2 9
Expert
Expert
 
Messaggi: 288
Iscritto il: 9 set 2008, 23:07

0
voti

[5] Re: MySql query su tre tabelle

Messaggioda Foto Utentelucbie » 14 mag 2010, 13:45

Di nulla! :wink:
Avatar utente
Foto Utentelucbie
85 1 3 7
Expert EY
Expert EY
 
Messaggi: 676
Iscritto il: 9 dic 2009, 21:18
Località: Brianza

0
voti

[6] Re: MySql query su tre tabelle

Messaggioda Foto UtenteDaniele78 » 14 mag 2010, 13:54

Funziona perfettamente.
Grazie mille!
Avatar utente
Foto UtenteDaniele78
290 2 9
Expert
Expert
 
Messaggi: 288
Iscritto il: 9 set 2008, 23:07

0
voti

[7] Re: MySql query su tre tabelle

Messaggioda Foto UtenteDaniele78 » 5 lug 2010, 14:08

Si rendono necessarie ulteriori modifiche alla query.
Mi è stata chiesta la possibilità di inserire per ogni operatore la possibiltà di avere un diretto superiore. Si tratta di un operatore che non è amministratore ma ha permessi di amministratore su uno o più operatori.
Ho pensato di aggiungere alla tabella contenente le credenziali di accesso un ulteriore colonna.
In pratica questa tabella contiene id_op. username, password, id_op_perm.
Quindi ho pensato di associare id_op_perm=NULL nel caso in cui l' operatore non ha nessun diretto superiore, in caso contrario id_op_perm sarà l' id operatore suo superiore.
La query precedente dovrà quindi estrarre anche l' id_op_perm.
Adesso la query è quindi su 4 tabelle e la cosa peggiore è che non riesco a riformulare la query. Non sono riuscito a capire il ragionamento che ci sta dietro. Gli esempi che ho trovato con google riguardo alle join riesco a capirli perché sono in ogni caso più semplici.
Avatar utente
Foto UtenteDaniele78
290 2 9
Expert
Expert
 
Messaggi: 288
Iscritto il: 9 set 2008, 23:07

0
voti

[8] Re: MySql query su tre tabelle

Messaggioda Foto Utentec1b8 » 5 lug 2010, 14:24

Provo a scrivere 2 righe semplici.
Nell'ipotesi che la tabella si chiami anag_operatori e che tu voglia estrarre lo username dei due operatori, scriverei così:
Codice: Seleziona tutto
select a.username, b.username
from anag_operatori as a
left join anag_operatori as b
on b.id_op=a.id_op_perm


E' quanto cerchi?
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23

0
voti

[9] Re: MySql query su tre tabelle

Messaggioda Foto UtenteDaniele78 » 5 lug 2010, 17:22

Attualmente sto utilizzando questa query:

SELECT nome_pratica, nome, nome_op
FROM pratica
INNER JOIN schedacliente
ON pratica.idcliente=schedacliente.idcliente
INNER JOIN anag_operatori
ON pratica.id_op=anag_operatori.id_op;

La tabella pratica contiene;
id_pratica come chiave primaria,
nome_pratica
id_operatore
id_cliente

La query che sto usando mi fornisce una tabella con l' elenco delle pratiche presenti mostrandomi anzichè id_operatore e id_cliente, nome operatore e nome cliente.

poiché un operatore può avere un superiore (anch' egli operatore) e necessario mostrarlo nella tabella.
Per quanto riguarda gli operatori ho due tabelle una contenente i dati anagrafici e l' altra contenente i dati per il login.
In quest' ultima ho aggiunto una colonna id_op_perm che conterrebbe l' id dell' operatore superiore.
Adesso dovrei modificare quella stessa query in modo da avere accanto al nome dell' operatore l' id dell' operatore superiore (almeno per il momento).
La join dovrà quindi essere integrata nella query esistente.

Grazie.
Avatar utente
Foto UtenteDaniele78
290 2 9
Expert
Expert
 
Messaggi: 288
Iscritto il: 9 set 2008, 23:07

0
voti

[10] Re: MySql query su tre tabelle

Messaggioda Foto Utentec1b8 » 5 lug 2010, 17:35

Non so come si chiami la tabella che contiene il id_op_per (ossia la tabella per il login), immagino non sia la anag_operatori, quindi la chiamo login.

Proverei in questo modo:
Codice: Seleziona tutto
SELECT nome_pratica, nome, nome_op, id_op_perm
FROM pratica
INNER JOIN schedacliente
ON pratica.idcliente=schedacliente.idcliente
INNER JOIN anag_operatori
ON pratica.id_op=anag_operatori.id_op
INNER JOIN login
ON login.id_op=anag_operatori.id_op;

O non ho capito la struttura?
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23

Prossimo

Torna a PC e informatica

Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti