Newsgroup: it.comp.software.database
Titolo: problemi con AND

Come posso fare una query di questo tipo??
select ........
.....
WHERE  condizione and ......and  (  (condizione and  condizione and
condizione)  ?   (condizione and  condizione and condizione)  ?  (condizione
and  condizione and condizione) )
Al porto del (?) mi manca l'operatore che mi permette di visualizzare:
tutte le tuple che verificano tutti i 3 blocchi di condizioni tra parentesi
(condizione and  condizione and condizione)
come se le condizioni tra parentesi fossero una sola condizione.
( condizioni ) and (condizioni) and (condizioni)
purtroppo se però metto gli AND al posto dei ? è come se avessi un'unica
catena di and facendo cosi perdere di significato le parentesi.
Non so se sono stato molto chiaro.
Grazie mille per l'attenzione :)

 Non so se sono stato molto chiaro.
Francamente no, almeno per me. Puoi postare la query reale?

> Francamente no, almeno per me. Puoi postare la query reale?
La query si compone dinamicamente grazie ad uno script php, quindi non è
sempre uguale, questo è comununque un esempio:
SELECT DISTINCT event.sid, signature.sig_priority, signature.sig_sid AS
ssid, date_format(event.timestamp,'%d/%m/%Y %T') AS time ,
signature.sig_name, ip_src, inet_ntoa(ip_src) AS ips, inet_ntoa(ip_dst) AS
ipd, ip_src, ip_dst, tcphdr.tcp_sport, tcphdr.tcp_dport, host_src, host_dst
FROM event INNER JOIN signature ON event.signature = signature.sig_id INNER
JOIN iphdr ON event.cid = iphdr.cid AND event.sid = iphdr.sid INNER JOIN
tcphdr ON event.cid = tcphdr.cid AND event.sid = tcphdr.sid and ( ( ip_src
<> 
3232235742
 and ip_dst <> 1074007227 ) and ( ip_src <> 
3232235742
 and
ip_dst <> 1074007243 and tcp_dport <> 1863 ) and ( ip_src <> 
3232235742
 and
ip_dst <> 1074007225 and signature.sig_name <> 'INFO MSN chat access' ) )
ORDER BY event.timestamp DESC
La parte che mi da problemi è la seguente:
( ( ip_src <> 
3232235742
 and ip_dst <> 1074007227 ) and ( ip_src <>
3232235742
 and ip_dst <> 1074007243 and tcp_dport <> 1863 ) and ( ip_src <>
3232235742
 and ip_dst <> 1074007225 and signature.sig_name <> 'INFO MSN chat
access' ) )
Qui è fatta con una serie di sole AND, in questo modo però non fa
esattamente quello di cui io avrei bisogno.
Nell'esempio, per quanto riguarda la parte problematica, infatti io vorrei
che mi visualizzasse i record che verificano:
  ( ip_src <> 
3232235742
 and ip_dst <> 1074007227 )
e che verificano
  ( ip_src <> 
3232235742
 and ip_dst <> 1074007243 and tcp_dport <> 1863 )
e questa
( ip_src <> 
3232235742
 and ip_dst <> 1074007225 and signature.sig_name <>
'INFO MSN chat access' )
E cioè che verifichi tutti e tre questi blocchi di condizioni.
(risultato condizioni 1 ) and (risultato condizioni2) and (risultato
condizioni3)
Così come l'ho scritta io con tutti gli AND, lui concatena tutto senza
prestare attenzione ai blocchi di condizioni, ottenedo cosi un risultato
diverso.
Grazie
Ciao

 diverso.
Se ho ben capito, cioè se si deve verificare anche una sola condizione fra
le tre (o due o tutte e tre) devi concatenare le 3 condizioni alternative
con OR, quindi:
( ( ip_src <> 
3232235742
 and ip_dst <> 1074007227 )
 OR ( ip_src <> 
3232235742
 and ip_dst <> 1074007243 and tcp_dport <> 1863 )
 OR ( ip_src <> 
3232235742
 and ip_dst <> 1074007225 and signature.sig_name



Io ho bisogno che si verifichino tutti e tre i blocchi di condizioni, le OR
non vanno bene.
Il prblema č che non vanno bene neanche le AND perchč verrebbe valutata in
questo modo :
( ip_src <> 
3232235742
 and ip_dst <> 1074007227 and ip_src <> 
3232235742
 and
ip_dst <> 1074007243 and tcp_dport <> 1863 and ip_src <> 
3232235742
 and
ip_dst <> 1074007225 and signature.sig_name
 <> 'INFO MSN chat  >  access' )
come una sola catena di AND.

 questo modo :
...
Semplifichiamo (ipotizzando di avere in variabili i valori esemplificati):
Where
          ( ip_src <> A and ip_dst <> B )
 AND ( ip_src <> A and ip_dst <> C and tcp_dport <> 1863 )
 AND ( ip_src <> A and ip_dst <> D and signature.sig_name <> 'E' )
Ora puoi fare un esempio di che cosa deve restituire ipotizzando valori di
A, B, C, D e E?


Ho trovato la soluzione,
è questa:
( not( ip_src = 
3232235759
 and ip_dst = 3564020013 ) and not( ip_src =
3284086682 and ip_dst = 
3232235757
 ) and not( ip_src = 
3232235742
 and ip_dst
= 1074007243 ) )
gli AND come messi prima non andavano bene perchè bastava che non fosse
verificata una condizione per impedire la visualizzazione del record.
Grazie, Ciao

 ha scritto nel messaggio
news:afi91b$ehgt9$1...@ID-117034.news.dfncis.de...
