2015-05-20 153 views
0

我有一个选择查询,我想检查一下,如果我的数据库表中的sensorValue数不在最大值和最小值之间,并且状态等于0,则回显一条消息。选择查询无法正常工作

我做了一件事情没有完全按照我想要的那样工作。 的代码是低于

//ALERT SYSTEM 
    $query2 = mysql_query("SELECT username, typeValue, datetime FROM sensors WHERE sensorValue < min OR sensorValue > max AND status='0'"); 
    while($row = mysql_fetch_array($query2)) 
    { 
     if($username==$row['username']) 
     { 
      $alert_message= " <b><font color=red><p align='center'>You Have Health Problem with Your ".$row['typeValue']." at ".$row['datetime']."</font></b>"; 
      $link_address = "viewsensordata.php?view=".$row['username']; 
      ?> 
      <a href="<?php echo $link_address;?>"> <?php echo $alert_message; ?> </a> 
      <?php 

     } 
    } 

什么是错的代码,它剧照呼应了消息,如果状态为1

+1

加上'或死亡(mysql_error())'来'的mysql_query()',看看是否有什么地方在那里 –

+0

无关失败,但你可以把它简化为“WHERE sensorValue NOT BETWEEN分钟,最大”。另外,我会尽量避免使用min和max作为列名,因为它们也是MySQL中函数的名称。 – AdamMc331

+1

你也没有做任何与最小和最大 - 请参阅https://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html –

回答

6

恐怕你必须把一个括号:

SELECT username, typeValue, 
datetime FROM sensors 
WHERE (sensorValue < min OR sensorValue > max) 
AND status='0' 

这里的“问题”是“and”和“or”优先,如果我没有错,你一直在做的是“sensorValue < min或(sensorvalue> and status ='0')”

+0

不,他需要把价值像10和100而不是'min'和'max' – Alex

+2

我相信min和max只是他的例子的占位符。 – taxicala

+1

这是一个很好的结果,我不确定优先顺序是什么,但它可能是解决方案。 @Alex如果最小和最大是列名,他们将工作。这听起来像OP只是得到不正确的结果,而不是一个错误。 – AdamMc331

1

您需要括号:

SELECT username, typeValue, datetime FROM sensors WHERE 
(sensorValue < min OR sensorValue > max) 
AND status='0' 
+0

谢谢,你是对的,但我必须接受其他答案,因为他先写了。 Upvoted – DogFace