Problema con Union

di il
6 risposte

Problema con Union

Salve a tutti, io ho due entità, una prodotti e una vendite. in prodotti ci sono tutte le caratteristiche die prodotti(id,nome,descrizione,prezzo ecc). In vendite ci sono solo gli id dei prodotti.

Ora volevo implementare una ricerca che l'utente poteva fare o con il campo nome o prezzo o tutti e due in base alla sua scelta; in poche parole può ricercare un prodotto sia per il nome del prodotto , sia per il prezzo, o tutti e due , o solo uno , sta tutto nella sua scelta.
Ovviamente i dati li vado a prendere nella tabella vendita(perchè solo i prodotti in vendita può ricercare naturalmente), e tramite l'id del prodotto(che sta sia in prodotti che in vendita) facevo una join con la tabella prodotti.

Allora ho buttato giù questo codice SQL:

select prodotti.nome

from prodotti,vendita

where vendita.id_prodotti=prodotti.id_prodotti AND ( 'INPUT DEL NOME DA RICERCARE' <> ''  AND prodotti.nome = 'INPUT DEL NOME DA RICERCARE')

UNION

select prodotti.prezzo

from prodotti,vendita

where vendita.id_prodotti=prodotti.id_prodotti AND ( 'INPUT DEL COSTO DEL PRODOTTO CHE SI VUOLE CERCARE' <> ''  AND prodotti.prezzo = ''INPUT DEL COSTO DEL PRODOTTO CHE SI VUOLE CERCARE')

in pratica se l'utente inserisce qualcosa per l'input del nome(vuole ricercare per nome) allora lui fa il confronto dei vari record della tabella per il nome, se non inserisce nulla non confronta nulla
stessa cosa per il costo.

In questo modo, con la union, avviene l'unione di due tabelle, e quindi mi sarei aspettato due colonne,una per il nome e una per il costo, cosa che non è avvenuta
e inoltre se ad esempio ci sono due prodotti con lo stesso nome li raggruppa(es 4 prodotti chiamati "Penne", non mi visualizza quattro volte "Penne" ma una sola volta)

Mi potreste dare una mano nel risolvere questo problema, se magari non so conoscete qualche altro modo.

Vi ringrazio molto per la disponibilità e pazienza

6 Risposte

  • Re: Problema con Union

    Ciao, non ti seguo.
    Non capisco a cosa ti serve mettere di mezzo una union.
    I risultati li estrai con:
    select prodotti.nome, prodotti.prezzo from .....
  • Re: Problema con Union

    Ciao toki,

    praticamente la ricerca deve essere fatta per nome del prodotti e il prezzo, solo che l'utente può anche scegliere di ricercare solo per nome, o solo per prodotto o per tutti e due. Quindi se andrei a fare la semplice select e magari l'utente inserisce solo il nome poi il confronto del prezzo lo fa con un testo vuoto, e quindi fallirebbe la ricerca.

    Quindi avevo pensato di fare due ricerche separate e poi unire le tabelle risultanti.

    Conosci un modo per risolvere il problema?
  • Re: Problema con Union

    Lascia stare la union serve a gestire altre problematiche.
    Devi lavorare sulla clausola where.
    Sono anni che non uso Access ma a logica e in base a quanto hai scritto usa questo approccio:
    where vendita.id_prodotti=prodotti.id_prodotti 
    AND 
    (
     'INPUT DEL NOME DA RICERCARE' = ''
    OR
     'INPUT DEL NOME DA RICERCARE' = prodotti.nome
    )
    AND 
    (
     'INPUT DEL Prezzo DA RICERCARE' = ''
    OR
     'INPUT DEL Prezzo DA RICERCARE' = prodotti.prezzo
    )
  • Re: Problema con Union

    Perfetto funziona alla perfezione, ti volevo chiedere:

    che ragionamento hai fatto per arrivare a scrivere questa query? cioè in poche parole me la potresti spiegare?

    No perchè l'ho capita ma non al 100%

    Ti ringrazio ancora per la disponibilità
  • Re: Problema con Union

    Ciao,
    cosa c'è che non ti è chiaro della query?
  • Re: Problema con Union

    No scusa ci ho ragionato un po' su e ora l'ho capita alla perfezione.
    solo una cosa se posso, per sviluppare il ragionamento da dove sei partito?
    ti ringrazio ancora per la disponibilità
Devi accedere o registrarti per scrivere nel forum
6 risposte