SQL IF EXIST проблема - PullRequest
       1

SQL IF EXIST проблема

0 голосов
/ 22 марта 2011

Я хочу сопоставить строку var с именем "$ ip" с именем столбца "ip" в таблице "$ Hood".Если совпадения нет, то сделайте что-нибудь.

Итак, у меня есть этот код:

if (mysql_query("IF EXISTS(SELECT TOP 1  1 FROM $Hood WHERE ip=$ip)") == 1) 

И он не работает, он должен вернуть 1, потому что совпадение есть.Что здесь не так?

Ответы [ 4 ]

1 голос
/ 22 марта 2011

Если совпадений не найдено, записи не возвращаются.Таким способом нельзя сравнивать записи NULL со значением «1».

Использование COUNT является одним из вариантов, но если количество совпадений очень велико, следующее может привести к повышению производительности (за счетбольше времени) ...

if (mysql_query("SELECT CASE WHEN EXISTS (SELECT * FROM $Hood WHERE ip=$ip) THEN 1 ELSE 0 END") != '1')


РЕДАКТИРОВАТЬ

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

Выполните ваш запрос непосредственно в SQL и посмотрите, каков будет результат.Если вы довольны тем, что SQL работает, вы знаете, что теперь вам нужно иметь дело только с PHP.

Создайте SQL-запрос и отобразите его на экране.Убедитесь, что он действительно сформирован правильно, и снова протестируйте его непосредственно в SQL.Теперь вы знаете, что ваш PHP правильно строит запрос.

Теперь соберите и выполните запрос в PHP, и выведите результат на экран.Соответствует ли результат поведению при тестировании непосредственно в SQL?

Наконец, встроите это в оператор IF.


Проверяя каждый шаг, вы можете быстро определитьТам, где лежат какие-либо проблемы, и атакуйте их напрямую.

1 голос
/ 22 марта 2011

У Mysql нет верхнего предложения.Вы должны использовать ограничение

select * from table where condition

Затем вы можете использовать mysql_num_rows () для проверки результата.

edit.Другая альтернатива

select exists(select * from table where condition) as result

, которая дает вам 1 или 0.

1 голос
/ 22 марта 2011

просто выберите соответствующий ip из БД следующим образом:

SELECT ip 
FROM $hood 
WHERE ip='$ip' 
LIMIT 1

и подсчитайте количество строк, если оно равно 1, тогда у вас есть совпадение, 0 в противном случае, например, так:

if(mysql_num_rows(mysql_query(SELECT ip FROM $hood WHERE ip='$ip' LIMIT 1)) == 1)
0 голосов
/ 22 марта 2011

Для mysql я думаю, что ваш запрос должен быть

select ip from $Hood where ip = $ip limit 0, 1.

Я также надеюсь, что вы экранируете или проверяете свои данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...