繁体   English   中英

双MySQL查询

[英]Double MySQL query

我目前正在开发具有投票功能的应用程序。 我希望人们不要登录并简化操作,所以我在每次投票后都会收集IP。 有了此功能,IP将不会再对同一件事进行投票。

但是我发现很难SELECT尚未由IP投票的投票。 我已经试过了:

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

如何正确执行此操作?

如果我正确理解了您-此查询应为您提供帮助:

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
SELECT * FROM messages 
WHERE state = '-1' 
  AND id NOT IN (SELECT message_id FROM log WHERE ip = '$ip')

会按照您说的做,但我很肯定不会做您想做的事:例如,它将只允许典型蜂窝塔的一个移动用户投票,但在他失去信号并重新聚集后将允许他再次投票它在另一个位置。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM