Newsgroup: it.comp.www.php
Titolo: ricerca ad esclusione

per sfizio (dato che nessuno me la ha chiesta)
vorrei fare una ricerca ad esclusione
faccio un caso:
cerco esattamente (ipotetico risultato he mi aspetto)
pc p4 2400 1000 euro portatile non shared asus (c' e' una cosa del genere ?)
e nel db ho il macello di dati 30000 record
la procedura che vorrei fare e' questa (ad esclusione)
trova tutti quelli shared e scartali (mostra i risultati)
trova tutti gli amd e scartali  (mostra i risultati)
trova tutti quelli che hanno ciffra >1300 e scartali  (mostra i risultati)
trova i sony e scartali  (mostra i risultati)
risultati 10 (fine) tra cui il qualcosa che mi posso accontentare
pc p4 2600 1200 euro portatile non shared acer
in paratica dal db deve mostrare quelli che _non_ hanno un determinato tipo
di caratteristiche
fare la ricerca di pc p4 2400 1000 euro portatile non shared asus non mi
darebbe il risultato dato che come risultato NON e' certo che ci sia.
esiste un modo non pattonale di fare la cosa ?

 esiste un modo non pattonale di fare la cosa ?
Ci sono varie possibilita, la piu pulita sarebbe quella di inserire in
sessione le condizioni di ricerca ogni volta aggiunte (es. cpu <>
'AMD', brand <> 'sony' etc.), eventualmente inserendo un ID per ogni
ricerca:
$_SESSION["Search_113243654"][1]["SQL"] = "brand <> 'sony'";
$_SESSION["Search_113243654"][1]["Description"] = "brand <> 'sony'";
$_SESSION["Search_113243654"][2]["SQL"] = "cpu <> 'AMD'";
$_SESSION["Search_113243654"][2]["Description"] = "No AMD CPU";
In questo modo sei in grado di gestire contemporaneamente piu' form di
ricerca da parte dello stesso utente. Ovviamente la form oltre a
passare i nuovi criteri di ricerca (da aggiungere o eliminare) dovrebbe
passare l'identificativo della ricerca che si vuole aggiornare.
Potresti anche prevedere l'aggiunta di una cosa del genere:
$_SESSION["Search_113243654"][1]["Operator"] = "AND"; // oppure OR etc.
In modo da rendere il sistema ancora piu' flessibile.
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/1
Inviare email con allegati? 
http://url.repository.biz/go/1Z
Cerchi un programmatore PHP/MySQL? 
http://url.repository.biz/go/1Y
L'uomo, conscio di sbagliare, persevera.

 pc p4 2600 1200 euro portatile non shared acer
scusa, ma forse non ho ben capito...
la condizione 1 č banalmente not shared cioč
select * form T where CampoShared = 0 (se shared vale 0 per falso e 1 
per vero ad esempio)
anche le altre condizioni sono ovviamente negazioni di ugaglianza... 
!(cpu = 'amd'); prezzo<1300 ; !(marca='sony')
mettendo in AND tutte queste condizioni hai quello che chiedevi:
SELECT *
FROM tblPC
WHERE (shared = 0) AND !(cpu = 'amd')AND (prezzo<1300) AND !(marca='sony')
se, come immagino le opzioni di ricerca sono in una form hai bisogno di 
creare i controlli per tutti i campi che desideri cercare in esclusione, 
e magari se le varie condizioni sono in AND o in OR per cui si possa 
cercare un pc non sony con processore amd, come un non sony non amd.
Ciao Gianfranzo
-- 
ICQ#: 21258924 Nick Gianfranzo
Home page 
http://www.gianfranzo.it
Gianfranzo č contro la guerra
"dopo tutto, gli angeli non sono altro che dei volatili" D. Pennac

trova i sony e scartali  (mostra i risultati)
Inverti la query.
... WHERE NOT ( 
	(tipo='shared')
	OR
	(cpu='amd')
	OR
	(cifra > 1300)
	OR
	(cd='sony')
);
Leonardo
-- 
Time's angles, mages tell, conceal a place
incredible, beyond the mundane mind;
night-shrouded and between the seas of space
dread creatures drift in the ageless winds.