Spiegazione Query postato il 08/08/2010 23:28:13 nel forum programmazione, gdrcd e open source
Allora,vi elenco due query differenti che mi stanno dando tortura di morte (il problema l'ho risolto,xò mi credete ke NON ho capito come ho fatto?...xk non riesco a capire la differenza tra le due query..)
Questo è il codice errato:
Pagine → 1 2
09/08/2010 00:30:06
Gli operatori logici, come quelli matematici, sono modificati dalle parentesi nell'ordine di esecuzione.
5 + (2 * 3)
è diverso
da
(5 + 2) * 3
quindi a seconda di come annidi OR e AND cambia il risultato (true o false) di ogni singola espressione e quindi può cambiare anche quello dell'espressione finale.
09/08/2010 10:30:42
Oltretutto i controlli su IDRazza e IDClasse <> 0 sono assolutamente inutili; un'altra cosa: per effettuare controlli su un range di valori utilizza between, è più leggibile. Comunque, buttando un'occhiata veloce, credo che il problema stia nell'or fra IDRazza e quell'altra brutta parentesi; avresti dovuto usare delle parentesi per incapsulare quell'espressione.
09/08/2010 11:27:11
il codice va bene ... ecco quello corretto
09/08/2010 11:37:27
09/08/2010 11:46:10 e modificato da nodd il 09/08/2010 12:05:56
Nn hai capito xD
Io la differenza la so..ma in QUEL caso,con QUELLE condizione..
SIA se metto OR,SIA se metto AND mi ridà lo stesso risultato Oo'..cpt qual'è il mio piccio?
09/08/2010 12:06:17 e modificato da la kaiah il 09/08/2010 12:09:17
evita di scrivere sproloqui, che non sono giustificati se non riusciamo a comprendere la tua domanda.
le differenze di applicazione degli operatori logici sono fortemente collegate all'uso delle parentesi.
and e or non hanno la stessa priorità, significa che se non metti delle parentesi per modificare la sequenza di esecuzione degli operatori and e or, saranno risolti sequenzialmente come li hai scritti
scrivere a and b or c
è diverso che scrivere a and ( b or c)
perchè nel'esecuzione della prima è come se ci fossero le parentesi sul primo operatore (a and b) or c
le query che hai scritto sono differenti ed è differente anche il loro significato logico dalla spiegazione che hai dato di quello che avrebbero dovuto fare. almeno della prima che ho letto.
edit: edito per lasciarti un altro link, spero più vicino a ciò che ti interessa.
http://www.mysqlitalia.it/recipes/112-gli-operatori-logici
09/08/2010 12:18:49 e modificato da vino_veritas il 09/08/2010 12:20:23
Guarda che semplicemente con quella condizione i risultati delle query sono diversi: nel caso dell'and ti restituisce solo i valori compresi fra 1 e 11, nel caso dell'or ti restituisce tutti i valori. Oltretutto, ti ripeto: scrivere "idrazza = 0 OR idrazza <> 0" non ha alcun senso. Significa dire "Se l'id è diverso da zero o è uguale a zero"; è ovvio che è un risultato sempre vero.
09/08/2010 12:29:07
si scusa..l'abitudine fa brutti skerzi,cmq corretto ^^..
Cmq vino ti pongo una domanda...
Se io scrivo
IDRazza = 0 OR (IDRazza <> 0 AND IDRazza >= 1 AND IDRazza < 11)
In questo caso,il <> non dovrebbe essere "eliminato" dal fatto che IDRazza dovrà per FORZA contenere un risultato pari a IDRazza >= 1 e IDRazza < 11 Oo?[ invece no,xk mi preleva tutti i risultati
e
IDRazza = 0 OR (IDRazza <> 0 OR IDRazza >= 1 AND IDRazza < 11)
in questo caso invece,mi preleva TUTTI i risultati che assume IDRazza e stiamo pace..
Capito qual'è la mia domanda??
Mi skuso ancora x prima,è stato involontario,pardon^^
09/08/2010 13:01:46
Perchè non provi le 2 query con solo quelle condizioni nel where? Scoprirai che in effetti restituiscono due resultset diversi, esattamente come ti aspetti :-)
09/08/2010 13:02:18
Discussione seguita da
Pagine → 1 2
Rispondi alla Discussione Aggiungi ai Preferiti Inoltra Discussione Forum Programmazione, GDRCD e Open Source Elenco Forum
I dati del generatore di rank sono stati aggiornati!