PROBLEMA [MySQL]Ricerca su più tabelle

Pubblicità

genny92c

Nuovo Utente
Messaggi
108
Reazioni
6
Punteggio
49
Salve ragazzi, avrei bisogno di aiuto.
Ho un programma che deve cercare un lotto libero all'interno del DB. Vi spiego meglio: Ho una tabella coltivazioni che ha come colonne tipologia, data inizio, data fine e id del lotto(varchar, date, date,int ).
poi ho una tabella lotti che ha gli id dei lotti e delle serre all'interno delle quali sono contenute (int, int).
Ho bisogno, possibilmente a livello DB, di una query che mi permetta di cercare i lotti che sono disponibili, i quali, cioè risultino non occupati alla data odierna.
Il problema sorge perchè non so come impostare questa query e quali operatori utilizzare, inoltre un ulteriore problema e relativo al dominio: non c'è fatto alcun riferimento all'interno della traccia della necessità di tenere uno storico delle coltivazioni(e di tenere salvate quindi, coltivazioni che vengono sostituite), ma se volessi tenerlo, non saprei come selezionare la tupla più recente tra quelle che risulterebbero per uno stesso lotto e come implementare la ricerca nel DB. Sapete darmi un indirizzo?

Il mio problema sorge dal fatto che non so come cercare sulla combinazione delle due tabelle: devo tener conto della possibilità che un lotto possa essere libero, e quindi non ci siano coltivazioni salvate sul db e devo anche conciliare la ricerca eventuale del lotto la cui coltivazione abbia una data di terminazione inferiore a quella odierna.

Stavo pensando ad una soluzione alternativa in cui, ogni lotto è già salvato nel DB nella tabella coltivazioni( anche se non ci sono coltivazioni presenti) con i campi tipologia, inizio e fine vuoti. Questa soluzione mi permetterebbe di avere più semplicità nella ricerca (anche se non so come verrebbero riconosciuti i campi vuoti rispetto alle operazioni di confronto delle date) ma poi esulerebbe un po' dalle responsabilità che avevo assegnato alla classe entityLotto del mio BCED

P.S. ho dimenticato di specificare che dovrei implementare una soluzione che non faccia uso di query innestate in quanto, in sede di esame, la versione mysql sarà precedente alla versione 4.1 che ha implementato la possibilità di utilizzarle
P.P.S. ciò per cui vi sto chiedendo aiuto non è un esame, è una tracia di esercitazione che stavo provando a svolgere
Grazie mille
 
Non mi è chiaro come hai strutturato il db, in particolare è confuso il modo in cui definisci (almeno a parole) le entità (coltivazione, lotto e serra).
Meglio se riporti la traccia del problema...
 
Il DB è composto dalle tabelle
Coltivazioni
tipo (varchar20), inizio (date), fine (date), idLotto (int)
Lotti
id (int) e idSerra (int)

Specifico che un determinato lotto può non avere una coltivazione storata, e quindi il join delle tabelle sul campo c.idLotto=l.id non è possibile
Non ho necessità di usare nessun campo della serra per quanto riguarda questa funzione per cui non ti ho riportato la tabella relativa
 
credo di aver risolto.
Se faccio un left joind del genere
SELECT * FROM coltivazioni as c right join lotti as l on l.id=c.idLotto where now()>c.fine or c.fine is null

Stupidamente non avevo pensato ad usare un outer join, così ottengo la vista che volevo ottenere e posso anche lasciare invariatè le responsabilità di ricerca alla classe LottoEntity del mio BCED.

Funziona, ma magari avete suggerimenti più eleganti?
 
Se riuscissi a metterci la struttura delle tabelle su cui fare join, potremmo aiutarti meglio probabilmente. Così la cosa purtroppo è un po' vaga.
 
Pubblicità
Pubblicità
Indietro
Top