双MySQL查询

时间:2012-01-25 20:24:53

标签: php mysql

我目前正在开发一款具有投票功能的应用。我希望人们不要登录并简化,所以我在每次投票后收集知识产权。有了这个功能,IP将再也不会对同一件事进行投票了。

但是我发现很难SELECT投票,而没有投票给IP。我试过这个:

SELECT * FROM messages 
WHERE state = '-1' 
  AND id != (SELECT message_id FROM log WHERE ip = '$ip')

我该如何正确地做到这一点?

3 个答案:

答案 0 :(得分:4)

如果我理解正确 - 这个查询可以帮到你:

SELECT messages.* FROM messages 
LEFT JOIN log ON log.message_id = messages.id AND log.ip = '$ip'
WHERE state = '-1' AND log.ip IS NULL

答案 1 :(得分:0)

SELECT * FROM messages 
WHERE state = '-1' 
  AND id NOT IN (SELECT message_id FROM log WHERE ip = '$ip')

会按照你说的做,但我很肯定它不会做你想做的事情:例如它只允许一个典型的手机信号塔的一个移动用户投票,但是在他丢失信号并在另一个位置恢复信号后,他将允许他再次投票。

答案 2 :(得分:0)

$qry = "SELECT * FROM messages " .
"WHERE state = '-1' AND NOT EXISTS (SELECT 1 FROM log WHERE log.message_id = messages.id  ". 
"AND ip = '" . $ip . "')";

A(NOT)EXISTS通常比IN表达式快