Альтернативный синтаксис в MySQL для 'IS NOT NULL' - PullRequest
1 голос
/ 14 июля 2011

Я использую php для компиляции длинного запроса mySQL. Для контекста я делаю MySQL-запрос, который просматривает таблицу 'rentals', в которой есть поля 'id', 'rent', 'type', 'num_bedrooms'. Пример записи может быть:

аренда = 600, тип = дом, num_bedrooms = 5

или

аренда = 450, тип = квартира, num_bedrooms = 3

При заполнении поля поиска пользователь имеет возможность искать «любой» для «типа» и «num_bedrooms». Обращая внимание на строку SQL 'type NOT NULL', мой вопрос:
Можно ли вместо этого сказать «тип = НЕ НУЛЬ»? (у меня есть идея, что если пользователь ищет «any» для «type», то я устанавливаю переменную «$ type» в php как «house» для поиска домов, «apartment» для поиска квартир или «NOT NULL» найти все)

<?php
$min_rent = 200;
$max_rent = 1000;
$type = "NOT NULL"; //or it can be equal to "house" or "apartment" 
$num_bedrooms = 2;  //e.g. 2 or more bedrooms

$sql = "SELECT * FROM properties WHERE ";
$sql .= "rent >= {$min_rent} AND rent <= {$max_rent} AND ";
$sql .= "type = {$type} ";  //in this case, I want 'type' to equal 'NOT NULL'
$sql .= "num_bedrooms >= {$num_bedrooms} ";
?>

Я не могу проверить это, потому что в данный момент я не на своем тестирующем ПК, но я очень незнаком с заявлениями mySQL и хотел знать, возможно ли это. Спасибо

Ответы [ 3 ]

3 голосов
/ 14 июля 2011

На самом деле есть альтернатива is not NULL.Например:

SELECT * FROM properties WHERE type = type

Возвращает все строки, когда type не равно нулю.

2 голосов
/ 14 июля 2011

Нет - IS NOT NULL - это специальная функция.

Как правило, вы должны поставить $ sql. = "type = {$ type}";

в операторе if, который проверял бы значение $ type при создании инструкции SQL.

1 голос
/ 14 июля 2011

Добро пожаловать в SO.

SQL обрабатывает нуль иначе, чем другая строка.Невозможно сказать type = "NOT NULL".MySQL будет возвращать типы с NOT NULL.(Не, как вы могли бы надеяться, те, которые содержат «дом» или «квартиру».

Эта строка должна была бы читать $sql .= "type IS NOT NULL "

Конечно, вы могли бы добавить оператор IF, который добавляетвышеуказанная строка в вашем особом случае.

...