sql where

Raccoglitore di domande e risposte relative a ScriptCase, il generatore di codice php per lo sviluppo rapido di applicazioni.
Regole del forum
Nel forum è vietato fare pubblicità senza avere l'autorizzazione dello staf di Netspecial.
Rispondi
Giampiero
Messaggi: 139
Iscritto il: 13 set 2014, 10:19

sql where

Messaggio da Giampiero » 21 apr 2016, 20:45

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

rino
Messaggi: 661
Iscritto il: 18 giu 2015, 15:42
Località: Pinerolo
Contatta:

Re: sql where

Messaggio da rino » 22 apr 2016, 00:52

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')
Rino Lo Turco
Consulente Informatico; Analista e Sviluppatore; ex IT Manager; Cons. Direzionale di Organizzazione; Consulente Tecnico legale; Esperto protezione dati personali; Internet Service Provider
felice utente e fruitore di ScriptCase

Giampiero
Messaggi: 139
Iscritto il: 13 set 2014, 10:19

Re: sql where

Messaggio da Giampiero » 22 apr 2016, 08:00

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

rino
Messaggi: 661
Iscritto il: 18 giu 2015, 15:42
Località: Pinerolo
Contatta:

Re: sql where

Messaggio da rino » 22 apr 2016, 09:42

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.
Rino Lo Turco
Consulente Informatico; Analista e Sviluppatore; ex IT Manager; Cons. Direzionale di Organizzazione; Consulente Tecnico legale; Esperto protezione dati personali; Internet Service Provider
felice utente e fruitore di ScriptCase

gianpagi
Messaggi: 78
Iscritto il: 31 mar 2016, 08:12

Re: sql where

Messaggio da gianpagi » 22 apr 2016, 09:51

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

Giampiero
Messaggi: 139
Iscritto il: 13 set 2014, 10:19

Re: sql where

Messaggio da Giampiero » 22 apr 2016, 10:44

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))

rino
Messaggi: 661
Iscritto il: 18 giu 2015, 15:42
Località: Pinerolo
Contatta:

Re: sql where

Messaggio da rino » 22 apr 2016, 16:12

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 ;-)
Rino Lo Turco
Consulente Informatico; Analista e Sviluppatore; ex IT Manager; Cons. Direzionale di Organizzazione; Consulente Tecnico legale; Esperto protezione dati personali; Internet Service Provider
felice utente e fruitore di ScriptCase

Giampiero
Messaggi: 139
Iscritto il: 13 set 2014, 10:19

Re: sql where

Messaggio da Giampiero » 26 apr 2016, 15:06

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:

Giampiero
Messaggi: 139
Iscritto il: 13 set 2014, 10:19

RISOLTO: sql where

Messaggio da Giampiero » 09 mag 2016, 09:38

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))

rino
Messaggi: 661
Iscritto il: 18 giu 2015, 15:42
Località: Pinerolo
Contatta:

Re: RISOLTO: sql where

Messaggio da rino » 09 mag 2016, 22:51

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:
Rino Lo Turco
Consulente Informatico; Analista e Sviluppatore; ex IT Manager; Cons. Direzionale di Organizzazione; Consulente Tecnico legale; Esperto protezione dati personali; Internet Service Provider
felice utente e fruitore di ScriptCase

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti