2013-03-19 3 views
1

Это мой код:MySQL не равно не работает

$query = mysql_query("SELECT P_Id, Thing,Something Date 
    FROM priv 
    WHERE Something = '$thing' AND thing2 <> 'This' 
    LIMIT 1" 
) or die(mysql_error()); 

Код правильно работает без "thing2 <> 'this'" заявления, но когда я реализую "thing2 <> 'this'", она возвращает 0 результат. Как будто в таблице не было пустых строк, но есть строки (NULL) в строке thing2 таблицы.

Проблема в том, что это утверждение «не равно» не работает, и я пробовал все, но он не будет возвращать никакие значения с ним.

изменить (слово объяснения): Столбцы выглядят так: P_Id | Что-то | Дата | Thing1 | Thing 2 и мне нужно получить P_Id из строки, где Something = Something AND Thing1 NOT EQLAS, чтобы «это» (выше примера), и Thing2 ТАКЖЕ НЕ РАВНО »для этого. Я знаю, что это звучит безумно. Коррекция

Хорошо, поэтому я пробовал некоторые эксперименты, и он говорит о том, что «thing2 <>» thingy не работает над вещами 1/thing2, но другие столбцы, такие как таблица «Что-то», где также «это» записи, он работает правильно (поиск самой нужной строки, где есть это не «эта» запись). Но почему это не работает с вещами1 и 2? Я попробовал переименовать столбец вещей, но никакого результата.

+1

Можете ли вы включают некоторые выборочные данные и ожидаемый результат? –

+0

Извините. Но запрос рассказать все (это образец) – user2107321

+0

@ user2107321: нет, вопрос делает ** не ** содержит всю информацию. Вы * можете * создать небольшую таблицу образцов, сообщить нам контент и показать нам результат тестового запроса. Это называется [SSCCE] (http://sscce.org) (обязательно следуйте и прочитайте эту ссылку!), И это * очень хорошая идея * как для поиска самой проблемы *, так и для возможности сообщить о проблеме сжато. –

ответ

5

something <> NULL will evaluate to NULL. И если используется в запросе, это почти то же самое, что и 0 (или false).

Помните, что SQL использует three-valued logic, а не просто бинарную логику.

Вам может понадобиться для проверки NULL явно с помощью IS NULL:

... OR THING IS NULL 

Alernatively вы можете использовать NULL-safe equals operator <=> с отрицанием (это MySQL специфический, однако, it's not standard SQL):

... AND NOT (THING <=> 'This') 
+0

+1 Я думаю, что здесь третья ценная логика. – Kermit

+0

Чтобы решить эту проблему, вы можете использовать «[null-safe] (http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_equal-to)" равно ('<=>') и оператора 'NOT' (поскольку нет« нуль-безопасных не равно »). 'WHERE NOT (thing2 <=> 'this')' –

+0

@RocketHazmat: интересно, я не знал, что у MySQL был такой оператор. Не возражаете, если я добавлю его к моему ответу? –

Смежные вопросы