Query per ricerca in db
irabad non è online. Ultima attività: 13/05/2008 18.52.47irabad
Inserito il: 12 maggio 2008 17.37
2 messaggi dal 12 mag 2008 Istalla Microsoft Silverlight!
Salve a tutti!

Avrei un problemino con mysql: ho questa query

"SELECT * FROM azienda WHERE nome = '%$nome%' OR indirizzo = '%$indirizzo%' OR citta LIKE '%$citta%' OR cap='%$cap%' OR telefono='%$telefono%' OR fax ='%$fax%' OR iscrcciaa ='$iscrcciaa' OR posinail = '$posinail' OR posinps='$posinps' OR posiva='$posiva' OR cassaedile='$cassaedile' OR titolare = '%$titolare%' OR teltitolare = '$teltitolare' OR medico = '%$medico%' OR telmedico='$telmedico' OR rspp = '%$rspp%' OR telrspp='$telrspp' OR adpronsocc = '%$adpronsocc%' OR teladpronsocc ='$teladpronsocc' OR respcant = '%$respcant%' OR telrespcant = '$telrespcant'";


che uso per ricercare i dati all'interno del db. Il problema è il seguente:
se mando in esecuzione la query compilando un solo campo essa mi restituisce TUTTI i dati presenti nel db... mentre a me servirebbero solo quelli simili ai campi inseriti!

Come posso fare
Grazie a tutti!!!
Microsoft Most Valuable Professional
Re: Query per ricerca in db
Andrea Montanari non è online. Ultima attività: 05/09/2008 12.29.26Andrea Montanari
Inserito il: 13 maggio 2008 18.21
contributi / Top Poster / Community manager / www.asql.biz / 925 messaggi dal 27 lug 2005 Istalla Microsoft Silverlight!
salve,
irabad wrote:
Salve a tutti!

Avrei un problemino con mysql: ho questa query

"SELECT * FROM azienda WHERE nome = '%$nome%' OR indirizzo = '%$indirizzo%' OR citta LIKE '%$citta%' OR cap='%$cap%' OR
telefono='%$telefono%' OR fax ='%$fax%' OR iscrcciaa ='$iscrcciaa' OR posinail = '$posinail' OR posinps='$posinps' OR posiva='$posiva' OR cassaedile='$cassaedile' OR titolare = '%$titolare%' OR teltitolare = '$teltitolare' OR medico = '%$medico%' OR telmedico='$telmedico' OR rspp = '%$rspp%' OR telrspp='$telrspp' OR adpronsocc =
'%$adpronsocc%' OR teladpronsocc ='$teladpronsocc' OR respcant = '%$respcant%' OR telrespcant = '$telrespcant'";


e' "sbagliata" la formulazione dei predicati del filtro, visto che, ovviamente, tutti risultano positivi per tutte le righe e quindi vengono restituite tutte le righe stesse..
devi, per ogni filtro, modificare la specifica in modo che non restituisca falsi positivi verificando che
( Colonna {= | LIKE | ...} @Parametro AND @Parametro IS NOT NULL ) AND ... in questo modo hai un riscontro positivo per le sole righe le cui colonne soddisfino il "confronto" (dato l'operatore) con il parametro sempre che il parametro stesso non sia nullo..
in SQL Server puoi scrivere qualche cosa simile a
SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.T (
Cognome varchar(5),
Nome varchar(5),
Indirizzo varchar(5),
Citta varchar(5),
Telefono varchar(5),
Fax varchar(5)
);
GO
INSERT INTO dbo.T
SELECT 'XXXXX', 'XXXXX', 'XXXXX', 'XXXXX', 'XXXXX', 'XXXXX' UNION ALL SELECT 'YYYYY', 'XXXXX', 'XXXXX', 'XXXXX', 'XXXXX', 'XXXXX' UNION ALL SELECT 'YYYYY', 'YYYYY', 'XXXXX', 'XXXXX', 'XXXXX', 'XXXXX' UNION ALL SELECT 'YYYYY', 'YYYYY', 'YYYYY', 'XXXXX', 'XXXXX', 'XXXXX' UNION ALL SELECT 'YYYYY', 'YYYYY', 'YYYYY', 'YYYYY', 'XXXXX', 'XXXXX' UNION ALL SELECT 'YYYYY', 'YYYYY', 'YYYYY', 'YYYYY', 'YYYYY', 'XXXXX' UNION ALL SELECT 'YYYYY', 'YYYYY', 'YYYYY', 'YYYYY', 'YYYYY', 'YYYYY';

DECLARE @Cognome varchar(5), @Nome varchar(5), @Indirizzo varchar(5), @Citta varchar(5), @Telefono varchar(5), @Fax varchar(5);
SELECT @Cognome = '%XXX%', @Nome = NULL, @Indirizzo = NULL, @Citta = NULL, @Telefono = '%YYY%', @Fax = NULL;

SELECT *
FROM dbo.T
WHERE (Cognome LIKE @Cognome AND @Cognome IS NOT NULL)
OR (Nome LIKE @Nome AND @Nome IS NOT NULL)
OR (Indirizzo LIKE @Indirizzo AND @Indirizzo IS NOT NULL)
OR (Citta LIKE @Citta AND @Citta IS NOT NULL)
OR (Telefono LIKE @Telefono AND @Telefono IS NOT NULL)
OR (Fax LIKE @Fax AND @Fax IS NOT NULL);

GO
DROP TABLE dbo.T;
--<-------
Cognome Nome Indirizzo Citta Telefono Fax
-----
---
-------
---
------
-----
XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX
YYYYY YYYYY YYYYY YYYYY YYYYY XXXXX
YYYYY YYYYY YYYYY YYYYY YYYYY YYYYY

saluti

Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz - http://italy.mvps.org
Re: Query per ricerca in db
irabad non è online. Ultima attività: 13/05/2008 18.52.47irabad
Inserito il: 13 maggio 2008 18.52
2 messaggi dal 12 mag 2008 Istalla Microsoft Silverlight!
Grazie!!! E' PERFETTO!!! Granddeeeee! :)

Vai a:
Torna al forum |   Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.


maltra - 701 pt
vladimiro - 471 pt
fabrica - 180 pt

Ultimi vincitori: fabrica, vladimiro, PeppeDotNet

Iscriviti anche tu e raccogli punti. Questo mese in palio VS 2008 + Windows Server 2008, ReShaper e 1 ebook!



COMMUNITY
ULTIMI MESSAGGI


IN EVIDENZA
MISC
Powered by .db Forums