[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: problema di select [sql]



On Sun, 19 Aug 2007, Davide Prina wrote:
> Leonardo Boselli wrote:
> scusa, forse sono io, ma dalla spiegazione che hai messo non capisco 
> quasi nulla.

se avessi capito bene anche io non avrei neppure postato la domanda. 
> Perché non fai un esempio semplice e capibile ... utilizzando dei valori 
> e indicando la struttura del db? (colonne, primary key, foreing key, 
> indici). Inoltre per le colonne è meglio utilizzare nomi comprensibili 
> al volo e non sigle.

ti cambio i nomi:
RID (indice, non usato)
UserName 
GroupName
BossLevel

In nquesta tabella ogni riga contiene uno username e un gruppo
(esattamente il cotento di /etc/groups, per inciso).
Siccome ogni utente può appartenere a più di un gruppo e ogni gruppo può
avere più membri ci possono essere piu` righe con gli stessi valori.
quello che c'è di più è il BossLevel.
Questo è un valore (intero) che indica se la persona è utente normale
(1) responsabile (2) o supervisore (3)
quello che voglio è dato un utente (Ub) avere la lista di tutti gli utenti
che appartengono a gruppi di cui Ub fa parte ma che hanno un
BossLevel minore o uguale a quello che Ub ha in quel gruppo
esempio: 
RID UserName GroupName Bosslevel
  1 Primo    lazy       1
  2 Primo    big        3
  3 Primo    nerd       1
  4 Secondo  jim	1
  5 Secondo  nerd       1
  6 Terzo    jim        2
  7 Terzo    big        2
  8 Quarto   nerd       3
  9 Quarto   big        2
 10 Quinto   jim        3
 11 Quinto   nerd       2
 12 Sesto    jim        3

se Ub="Primo" mi ritorna Primo, Secondo (nerd[Secondo]<=nerd[Primo]), 
Terzo (big[Terzo]<=big[Primo]), Quarto (big[Quarto]<=big[Primo])
non mi ritorna invece Quinto in quanto nerd[Quinto]>nerd[Primo] e Primo
non ha altri gruppi in comune con Quinto e Sesto.

se scelgo secondo mi ritornerà oltre se stesso solo primo in quanto è
l'unico che ha un gruppo (nerd) con bossleverl non superiore.

terzo mi ritornerà secondo terzo e quarto

quarto mi ritorna primo secondo terzo quarto quinto

quinto invece primo secondo terzo quinto e sesto

mente se gli do sesto avrò secondo terzo quinto e sesto

>In generale puoi usare i costrutti
> 
> select ...
> from Tabella1
> where Tabella1.campo1 in( select ...)
> 
> select ...
> from Tabella1 as T1, (select ...) as T2
> where ...
> 
> Ciao
> Davide
> 
> -- 
> Dizionari: http://linguistico.sourceforge.net/wiki
> Sistema operativo: http://www.it.debian.org
> GNU/Linux User: 302090: http://counter.li.org
> Non autorizzo la memorizzazione del mio indirizzo su outlook
> 
> 
> 



Reply to: