mysql - 使用列检查选择其他表中是否存在所有行 ID

标签 mysql sql

我有两个表,sitescallback_votes,其中 sites 包含可供投票的可用站点,而 callback_votes 包含已投票的选票在每个网站上完成。

callback_votes 的结构如下:

img
(来源:gyazo.com)

每次有人投票时,回调都会添加一个新的 callback_votes 行,其中包含他投票的站点 id 到 site_id 以及他投票的用户名和 ip 地址。

现在我想做的是,通过 all callback_votes 行检查用户是否对表站点中的所有站点进行了投票对于给定的 ip,并检查它是否与 sites 表中的 site_id 匹配

这是我尝试做的事情:

SELECT sites.* 
FROM sites 
WHERE (
    SELECT COUNT(*) 
    FROM callback_votes 
    WHERE callback_votes.ip = '127.0.0.1') = (
        SELECT COUNT(*) 
        FROM sites);

但是这个查询不会按我想要的方式工作,它只检查是否有与该 ip 相同的投票数与 sites 表上的行数相同,这是可以作弊的。

如何按照我描述的方式进行?

编辑;

我的网站提供了可供投票的网站,每个网站在网站表中都有自己的 ID。要在站点上投票,用户单击该站点(我使用站点表加载所有站点按钮)并将他发送到该站点的页面。用户投票后,他投票的网站会向我的网站发送回调,我的网站将在 callback_votes 中创建一个新行,其中包含他投票的网站 id、他的 ip 和用户名。

现在我想通过检查 callback_votes 中的票数是否相同以及 site_id 相互匹配以防止作弊来检查用户是否已在所有可用网站上投票。

最佳答案

在ip为用户ip的回调中获取不在distinct number of sites中的站点数:

Select count(*) From sites 
Where site_id NOT IN (Select DISTINCT site_id From callback_votes Where ip='1.0.0.127')

这将返回尚未被该 ip 投票的站点数。如果计数为 0,则用户已全部投票。

关于mysql - 使用列检查选择其他表中是否存在所有行 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23964041/

相关文章:

sql - Postgresql - 如何仅在满足特定条件时插入

MYSQL "create match on X date if team A and team B are free"使用过程和事务

sql - Oracle - 连接中的表别名和 NULL 计算

mysql - 如何在 MySQL 中读取 BINARY 列中的值

php - 从查询/ View 字段中查找基础字段

mysql - Select with count 的 SQL 结果

java - 选择求和条件连接表mysql

php - 如何在laravel中生成自定义标识值?

mysql - Google Cloud SQL - 插入性能慢

php - 将 $_GET 传递给 mySQL 查询