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