2010-12-31 4 views
0

i solche Abfrage benötigenmysql IFNULL wo

select * from t where 
field=ifnull(:param, field) 'it not work's 

also, wenn param = NULL ich habe

select * from t where field is NULL 

aber wenn param = 4 ich habe

select * from t where field=4 

Antwort

3

Sie können den Fall verwenden, wenn in where-Klausel AFAIK bot nicht sicher MySQl,

Aber der bessere Ansatz ist es, sie zu übersetzen,

Sie über diese SQL WHERE clauses: Avoid CASE, use Boolean logic

So

lesen
select * from t where (:param is null and filed is null) or (filed = :param) 
0

Ich glaube, Sie sind Suchen nach NULLIF anstelle von ifnull

Ich denke, besser Ansatz wäre, CASE in where-Klausel in Ihrem Fall zu verwenden.

0

Wenn Sie mit NULL arbeiten, können Sie keine arithmetischen Operatoren verwenden. Versuchen Sie COALESCE auf eine logische, wenn mit Werten integer oder NULL zu machen

mysql> SELECT COALESCE(NULL,1); 
    -> 1 
mysql> SELECT COALESCE(NULL,NULL,NULL); 
    -> NULL 
1

Sie diese Alternative können versuchen, dies könnte Ihnen helfen

select * from t where (field = NULL AND param= NULL) OR field ='4'