SQL IF EXIST问题

时间:2011-03-22 12:28:57

标签: mysql sql

我想将名为“$ ip”的字符串var与“$ Hood”表中的列名“ip”相匹配。 如果没有匹配则执行某些操作。

所以我有这段代码:

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

它不起作用,它假设返回1因为匹配。 这有什么不对?

4 个答案:

答案 0 :(得分:1)

Mysql没有top子句。你必须使用限制

select * from table where condition

然后您可以使用mysql_num_rows()来检查结果。

修改。 Anothere替代

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

给你1或0。

答案 1 :(得分:1)

只需选择匹配的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)

答案 2 :(得分:1)

如果未找到匹配项,则不返回任何记录。您无法以这种方式将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语句中。


通过验证每个步骤,您可以快速确定问题所在的位置并直接攻击它们。

答案 3 :(得分:0)

对于mysql,我认为你的查询应该是

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

我也希望您能够逃避或验证您的数据。