No MySql, estou precisando de um SQL para fazer os seguintes testes no WHERE

Primeiro: Testar se a tabela1.codigo é igual a tabela2.codigo e tabela1.subcodigo é igual a tabela2.subcodigo

Segundo: Testar se a tabela2.codigocidade é igual ao parâmetro $codigocidade e tabela2.codigocidade = tabela3.codigocidade

Terceiro: Testar se a tabela2.codigoestado é igual ao parâmetro $codigoestado e tabela2.codigoestado igual a tabela4.codigoestado

O meu SQL abaixo funciona quando é passado um código para os parâmetros $codigocidade e $codigoestado, mas quando o parâmetro é vazio seja ele em ambos ou somente no $codigocidade gera um erro "Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in".

select tabela1.*, tabela2.*, tabela3.*, tabela4.*
from tabela1, tabela2, tabela3, tabela4
where
(tabela1.codigo = tabela2.codigo and tabela1.subcodigo = tabela2.subcodigo) and (tabela2.codigocidade = '$codigocidade' and tabela2.codigocidade = tabela3.codigocidade) and (tabela2.codigoestado = '$codigoestado' and tabela2.codigoestado = tabela4.codigoestado)

O que devo fazer para resolver este problema de parâmetro vazio? Pois o visitante do site pode lista por estado, estado e cidade ou simplesmente lista todos os registros.

Agradeço desde já.