Good afternoon. I need your help to make correctly query into database.
I have following table in DB with adresses, eg.
id | street | house_nuber | city | district |
---|---|---|---|---|
1 | First street | 1225 | City One | NULL |
2 | NULL | 25 | Small city | NULL |
3 | Second street | 51 | Roswell | District nine |
4 | Third street | 15963 | Last city | Another district |
In the table above you can see i have adresses. I also have random NULL values in rows. My table has about 50k records for now.
PHP code fill variables with following values
$street = 'First street'; $houseNum = 1125; $city = 'City One'; $district = NULL;
I need to return ID from database of matching adress. If i know, where NULL value is, query is easy.
SELECT id FROM adress WHERE street=$street AND house_number=$houseNum AND city=$city AND district IS NULL
(normaly i use PDO, this is only for ilustration)
And now my question. How to make query, If i can´t predict, where NULL value is? I tryed to make query with empty strings, but for database is not same the NULL and empty and i always had false return.
Thak you and have a nice day.
Advertisement
Answer
To match exactly rows in your table, you can use NULLIF() to convert your PHP empty strings to SQL NULL values and NULL-safe operator to compare NULL to them without NULL result.
Ex. :
$sql = <<<SQL SELECT id FROM adress WHERE TRUE AND street <=> NULLIF({$pdo->quote($street)}, '') AND house_number <=> NULLIF({$pdo->quote($houseNum)}, '') AND city <=> NULLIF({$pdo->quote($city)}, '') AND district <=> NULLIF({$pdo->quote($city)}, '') SQL;