我目前正在开发一款具有投票功能的应用。我希望人们不要登录并简化,所以我在每次投票后收集知识产权。有了这个功能,IP将再也不会对同一件事进行投票了。
但是我发现很难SELECT
投票,而没有投票给IP。我试过这个:
SELECT * FROM messages
WHERE state = '-1'
AND id != (SELECT message_id FROM log WHERE ip = '$ip')
我该如何正确地做到这一点?
答案 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表达式快