Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Altri Linguaggi - Utilizzare campo database come flag e confronto bitwise
Forum - Altri Linguaggi - Utilizzare campo database come flag e confronto bitwise

Avatar
ampeg (Normal User)
Pro


Messaggi: 124
Iscritto: 21/04/2011

Segnala al moderatore
Postato alle 7:56
Venerdì, 21/12/2012
Salve, ho due tabelle SQL Server: [Gelati] e [Persone]

Tabella [Gelati]
----------------
IDGusto  | Gusto
----------------
1        | Cioccolato
2        | Crema
4        | Pistacchio
8        | Fragola
16       | Nocciola

nella tabella Persone memorizzo la combinazione di gusti che una persona ha scelto
riferita alla tabella [Gelati]

Tabella [Persone]
(ID_Combinazione_Gusti è la somma booleana dei singoli [Gelati].[IDGusto]
--------------------------------
Nome     | ID_Combinazione_Gusti
--------------------------------
Pippo    | 1   (Cioccolato)
Pluto    | 5   (Cioccolato + Pistacchio)
Paperino | 10  (Crema + Fragola)
Topolino | 26  (Crema + Fragola + Nocciola)
Titti    | 9   (Cioccolato + Fragola)

Esempio 1
tramite query devo ottenere nomi dalla tabella Persone che nel loro gelato è compreso il "Cioccolato"

  select
    *
  from
    Persone
  where
    ID_Combinazione_Gusti & 1 = 1

  Risultato query:

    Pippo
    Pluto
    Titti

Esempio 2
tramite query devo ottenere i nomi dalla tabella Persone che nel loro gelato è compreso sia la "Crema" che la "Fragola"

  select
    *
  from
    Persone
  where
    ID_Combinazione_Gusti & 2 = 2 AND
    ID_Combinazione_Gusti & 8 = 8

  Risultato query:

    Paperino
    Topolino

Esempio 3
tramite query devo ottenere singolarmente dalla tabella Gelati gli IDGusto di gelato scelti dalla persona Topolino

  select
    IDGusto
  from
    Gelati
  where
    IDGusto & 26 = 1 or
    IDGusto & 26 = 2 or
    IDGusto & 26 = 3 or
    IDGusto & 26 = 4 or
    IDGusto & 26 = 5 or
    IDGusto & 26 = 6 or
    IDGusto & 26 = 7 or
    IDGusto & 26 = 8 or
    IDGusto & 26 = 9 or
    IDGusto & 26 = 10 or
    IDGusto & 26 = 11 or
    IDGusto & 26 = 12 or
    IDGusto & 26 = 13 or
    IDGusto & 26 = 14 or
    IDGusto & 26 = 15 or
    IDGusto & 26 = 16

  Risultato query:

    2  (Crema)
    8  (Fragola)
    16 (Nocciola)


Sto procedendo correttamente ?
Posso ottimizzare qualcosa o fare in altro modo ?

Grazie.

Ultima modifica effettuata da ampeg il 21/12/2012 alle 13:31
PM Quote