Pagina 1 di 1

sql where

Inviato: 21 apr 2016, 20:45
da Giampiero
buonasera, ho il seguente problema: in un grafico composto da due tabelle relazionate una a molti ho la necessità che vengono visualizzate le posizioni della tabella anagrafica scadute quindi con data scadenza minore ad oggi e che sono ancora in lavorazione quindi nella tabella scarico il campo esito deve essere vuoto oppure parziale ho scritto la seguente condizione
WHERE
(anagrafica.Scadenza<= Date("Y-M-D-")) AND
(scarico.ESITO IS NULL) OR
(scarico.ESITO = 'Parziale')
ma funziona solo in parte cioè mi fa vedere nel grafico non tiene conto delle posizioni dove il campo esito è vuoto e fino a qui tutto ok ma mi conteggia tutte le posizioni anche quelle con data scadenza successiva ad oggi dove nel campo esito è indicato Parziale
dove sbaglio ?
grazie

Re: sql where

Inviato: 22 apr 2016, 00:52
da rino
la or per come è scritta apre una nuova condizione, usa le parentesi per fare in modo che nul e parziale siano la stecca ocsa , oppure dopo la or metti un altro filto prorendendo la prima parte .

WHERE
(anagrafica.Scadenza<= Date("Y-M-D-")) AND
(scarico.ESITO IS NULL) OR (anagrafica.Scadenza<= Date("Y-M-D-")) and
(scarico.ESITO = 'Parziale')

Re: sql where

Inviato: 22 apr 2016, 08:00
da Giampiero
grazie per la risposta, ho provato anch'io ma così mi restituisce la tabella vuota anche se ci sono posizioni con l'esito parziale scadute credo, come mia hai indicato tu sia un problema di parentesi ma non riesco a trovare la soluzione

Re: sql where

Inviato: 22 apr 2016, 09:42
da rino
allora tu hai due condizioni di test. A or B
devi delimitare A e B come ? racchiudendole . (A) or (B)
quesot esmepio credo ti sarà chiaro , scusa ma ho preso il primo magari altri lo sono di piu ma il tempo ...

no link please:.techonthenet.com/mysql/and_or.php.

Re: sql where

Inviato: 22 apr 2016, 09:51
da gianpagi
Giampiero ha scritto:buonasera, ho il seguente problema: in un grafico composto da due tabelle relazionate una a molti ho la necessità che vengono visualizzate le posizioni della tabella anagrafica scadute quindi con data scadenza minore ad oggi e che sono ancora in lavorazione quindi nella tabella scarico il campo esito deve essere vuoto oppure parziale ho scritto la seguente condizione
WHERE
(anagrafica.Scadenza<= Date("Y-M-D-")) AND
(scarico.ESITO IS NULL) OR
(scarico.ESITO = 'Parziale')
manca una coppia di parentesi
prova in questo modo :

WHERE
(anagrafica.Scadenza<= Date("Y-M-D-")) AND
((scarico.ESITO IS NULL) OR
(scarico.ESITO = 'Parziale'))

Saluti
Gianpaolo

Re: sql where

Inviato: 22 apr 2016, 10:44
da Giampiero
Rino scusami ma devi avere pazienza, credo che il problema sia sul riferimento DATE("Y-M-D") in quanto ho cambiato campo è funziona per semplicità posto di nuovo le modifiche apportate ma mi restituisce la tabella vuota
WHERE
((anagrafica.scadenza < DATE("Y-M-D")) AND
(scarico.ESITO = "Parziale")) OR
((anagrafica.scadenza < DATE("Y-M-D")) AND
(scarico.ESITO IS NULL))

cambiando i campi e mantenendo la stessa struttura funziona!!
WHERE
((anagrafica.nominativo = "rossi mario") AND
(scarico.ESITO = "Parziale")) OR
((anagrafica.nominativo = "rossi mario") AND
(scarico.ESITO IS NULL))

Re: sql where

Inviato: 22 apr 2016, 16:12
da rino
Giampiero ha scritto:Rino scusami ma devi avere pazienza, credo che il problema sia sul riferimento DATE("Y-M-D") in quanto ho cambiato campo è funziona per semplicità posto di nuovo le modifiche apportate ma mi restituisce la tabella vuota
WHERE
((anagrafica.scadenza < DATE("Y-M-D")) AND
(scarico.ESITO = "Parziale")) OR
((anagrafica.scadenza < DATE("Y-M-D")) AND
(scarico.ESITO IS NULL))

cambiando i campi e mantenendo la stessa struttura funziona!!
WHERE
((anagrafica.nominativo = "rossi mario") AND
(scarico.ESITO = "Parziale")) OR
((anagrafica.nominativo = "rossi mario") AND
(scarico.ESITO IS NULL))
preferisco hce si capiscnao le soluzioni piuttosto che applicarle senza capirle.
ecco un link per la gestione delle date in mysql
https://dev.mysql.com/doc/refman/5.5/en ... ction_date
troverai le istruzioni per fare in modo che i raffronti siano tra variaibli omogenee
Sulle date accade di tutto.
Intanto hai superato il primo problema con l'uso delle parentesi (era un problema di logica) , adesso la strada è solo in discesa (è un problema di tipologia dati) .
se hai problemi scrivi e se risolvi pure ;-)

Re: sql where

Inviato: 26 apr 2016, 15:06
da Giampiero
Buongiorno, non mi è chiaro ancora qualche passaggio ho provato con il date_format mi fa vedere anche quelle con scadenza futura
WHERE
((DATE_FORMAT(anagrafica.scadenza, '%d/%m/%Y') < DATE_FORMAT(CURDATE(), '%d/%m/%Y')) AND (scarico.ESITO = "Parziale")) OR ((DATE_FORMAT(anagrafica.scadenza, '%d/%m/%Y') < DATE_FORMAT(CURDATE(), '%d/%m/%Y')) AND (scarico.ESITO IS NULL))
:shock:
:oops:

RISOLTO: sql where

Inviato: 09 mag 2016, 09:38
da Giampiero
avevo più volte provato ma non funzionava l'altro ieri ha filtrato i dati in modo corretto che sia dovuto a un bug

WHERE
(anagrafica.scadenza< CURDATE()) AND
(scarico.ESITO = "Parziale") OR
((anagrafica.scadenza < CURDATE()) AND (scarico.ESITO IS NULL))

Re: RISOLTO: sql where

Inviato: 09 mag 2016, 22:51
da rino
Giampiero ha scritto:avevo più volte provato ma non funzionava l'altro ieri ha filtrato i dati in modo corretto che sia dovuto a un bug

WHERE
(anagrafica.scadenza< CURDATE()) AND
(scarico.ESITO = "Parziale") OR
((anagrafica.scadenza < CURDATE()) AND (scarico.ESITO IS NULL))
non credo a bug che sparisocno se non si aggiorna la versione.
comunque mi pare che hai un errore logico sulla qry
la opzione OR opera su "esito" in modo errato.

anagrafica.scadenza< CURDATE() AND
((scarico.ESITO = "Parziale") OR (scarico.ESITO IS NULL))

dovrebbe essere più corretta .
Non hai un ambiente per testare e generare le qry? usa https://www.mysql.it/products/workbench/
oppure https://www.devart.com/dbforge/mysql/studio/ ( questo a pagamento ma potentissimo)
L'ambiente SC non lo uso trovando quei due prodotti molto piu specialistici, puoi testare un sacco di cose sul db spingerti molto lontano veros lidi inimmaginabili ( lo so sembra ma in realtà non fumo da oltre 25 anni) :mrgreen: