Pagina 1 di 2

MySql query su tre tabelle

MessaggioInviato: 14 mag 2010, 10:58
da Daniele78
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!

Re: MySql query su tre tabelle

MessaggioInviato: 14 mag 2010, 11:54
da lucbie
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

Re: MySql query su tre tabelle

MessaggioInviato: 14 mag 2010, 12:26
da Daniele78
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

Re: MySql query su tre tabelle

MessaggioInviato: 14 mag 2010, 13:02
da Daniele78
Scusami. Non funziona perché ho cancellato quei clienti dalla tabella schedaclienti. Adesso li reinserisco e ti farò sapere.
Grazie ancora.

Re: MySql query su tre tabelle

MessaggioInviato: 14 mag 2010, 13:45
da lucbie
Di nulla! :wink:

Re: MySql query su tre tabelle

MessaggioInviato: 14 mag 2010, 13:54
da Daniele78
Funziona perfettamente.
Grazie mille!

Re: MySql query su tre tabelle

MessaggioInviato: 5 lug 2010, 14:08
da Daniele78
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.

Re: MySql query su tre tabelle

MessaggioInviato: 5 lug 2010, 14:24
da c1b8
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?

Re: MySql query su tre tabelle

MessaggioInviato: 5 lug 2010, 17:22
da Daniele78
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.

Re: MySql query su tre tabelle

MessaggioInviato: 5 lug 2010, 17:35
da c1b8
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?