Newsgroup: it.comp.software.database
Titolo: fusione tabelle / query complicata

Ho un database formato da tre tabelle, come in questo esempio:
products_id       attribute_id      attribute_value
     1                 1                 Franz Kafka
     1                 2                 1999
     2                 1                 Stefano Benni
     2                 3                 4,50€
     2                 4                 Narrativa
     3                 2                 1994
     3                 4                 Rock
attribute_id       attribute_name
     1                 Autore
     2                 Anno
     3                 Prezzo
     4                 Genere
products_id        products_name
     1                 La metamorfosi
     2                 Baol
     3                 Innuendo
La prima tabella esprime una serie di attributi (identificati da un id) per 
i prodotti.
La seconda esprime i possibili attributi (definendone il nome).
La terza specifica il nome dei prodotti.
Ho la necessità di fondere le tabelle creando un apposito campo per ogni 
attributo esistente (mettendo come nome del campo il nome dell'attributo).
Esempio:
products_id  products_name     Autore        Anno  Prezzo  Genere
     1       La metamorfosi   Franz Kafka    1999
     2       Baol             Stefano Benni         4,50€  Narrativa
     3       Innuendo                        1994          Rock
É possibile fare ciò in MySQL?
Il problema nasce dal fatto che, nel database come sopra, non riesco a fare 
una query che permetta di controllare simultaneamente più campi attributi di 
uno stesso prodotto.
es. se io devo cercare tutti i libri di Kafka, la clausola Where conterrà:
   attribute_value like '%Kafka%' and attribute_id = 1
se invece devo cercare tutti i prodotti del 1999, la clausola Where 
conterrà:
   attribute_value like '%1999%' and attribute_id = 2
se però ho la necessità di verificare entrambe queste condizioni, la query:
   (attribute_value like '%Kafka%' and attribute_id = 1) and 
(attribute_value like '%1999%' and attribute_id = 2)
non funziona.
Esiste in alternativa un modo per fare quello che mi serve?
Grazie.
-- 
SigiTM
Togli 'NOSPAMMM' per rispondermi.
Visita il sito dei Metal Detector: 
http://listen.to/metaldetector
 

 
Non rispondo alla tua richiesta ma ti sconsiglio di complicarti la vita
in questo modo.
Che senso ha usare degli id numerici così?
Semplicemente fai
tabella Nomi_attributi
Autore
Anno
Prezzo
tabella Nomi_prodotti
La metamorfosi
Baol
ed usi questi nella tua tabella principale (usando le foreign key).
P.S.
Qualcuno più esperto di me ti sconsiglierà comunque un disegno del
genere, poco relazionale.
Saluti  Manlio Perillo

 campi attributi di uno stesso prodotto.
E non sarà il solo problema; applicare l'integrità a codesto schema
sarà a dir poco problematico, senza contare i join necessari a
recuperare i significati degli ID (dato che di per sé non significano
nulla).

 É possibile fare ciò in MySQL?
mmm secondo me no.
Puoi farlo dal linguaggio di alto livello che usi per programmare
l'interfaccia a questi dati.
Scandendo riga per riga controlli se il product_id è diverso, quando
questo accade significa che hai cambiato record etc.
Comunque mi associo ai consigli che hai ricevuto finora: il db
strutturato così è poco gestibile; ti conviene cambiare schema, se ne
hai la possibilità.
Ciao