Mysql 通过列检查选择是否所有行ID都存在于其他表中

Mysql 通过列检查选择是否所有行ID都存在于其他表中,mysql,sql,Mysql,Sql,我有两个表,sites和callback\u voces,其中sites保存了可用的站点进行投票,而callback\u voces保存了每个站点上已经进行的投票 回调投票的结构如下所示: (来源:) 每次有人投票时,回调都会将一个新的callback\u voces行添加到site\u id中,该行包含他投票的站点id以及他投票的用户名和ip地址 现在我想做的是,通过查看给定ip的allcallback\u votes行,检查用户是否对表sites中的所有站点进行了投票,并检查它是否与sit

我有两个表,
sites
callback\u voces
,其中sites保存了可用的站点进行投票,而
callback\u voces
保存了每个站点上已经进行的投票

回调投票的结构如下所示:


(来源:)

每次有人投票时,回调都会将一个新的
callback\u voces
行添加到site\u id中,该行包含他投票的站点id以及他投票的用户名和ip地址

现在我想做的是,通过查看给定ip的all
callback\u votes
行,检查用户是否对表sites中的所有站点进行了投票,并检查它是否与
sites
表中的
site\u id
匹配

以下是我试图做的:

但是这个查询无法按我的要求工作,它只检查该ip的投票数是否与sites表上的行数相同,这是可以作弊的

我怎样才能像我描述的那样做呢

编辑

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


现在,我想通过检查回调投票中的投票数是否相同,以及站点id是否相互匹配以防止作弊来检查用户是否对所有可用站点进行了投票。

获取不在回调中的站点数,其中ip是用户的ip:

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

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

获取不在回调中的不同站点数中的站点数,其中ip是用户的ip:

Select count(*) From sites 
Where site_id NOT IN (Select DISTINCT site_id From callback_votes Where ip='1.0.0.127')
SELECT IF(COUNT(DISTINCT(c.site_id)) = (SELECT COUNT(s.site_id) FROM sites s), 'true', 'false') as voted_all
FROM callback_votes c
WHERE c.ip='127.0.0.1';

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

获取不在回调中的不同站点数中的站点数,其中ip是用户的ip:

Select count(*) From sites 
Where site_id NOT IN (Select DISTINCT site_id From callback_votes Where ip='1.0.0.127')
SELECT IF(COUNT(DISTINCT(c.site_id)) = (SELECT COUNT(s.site_id) FROM sites s), 'true', 'false') as voted_all
FROM callback_votes c
WHERE c.ip='127.0.0.1';

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

获取不在回调中的不同站点数中的站点数,其中ip是用户的ip:

Select count(*) From sites 
Where site_id NOT IN (Select DISTINCT site_id From callback_votes Where ip='1.0.0.127')
SELECT IF(COUNT(DISTINCT(c.site_id)) = (SELECT COUNT(s.site_id) FROM sites s), 'true', 'false') as voted_all
FROM callback_votes c
WHERE c.ip='127.0.0.1';
这将返回此ip尚未投票的站点数。若计数为0,则用户已全部投票

SELECT IF(COUNT(DISTINCT(c.site_id)) = (SELECT COUNT(s.site_id) FROM sites s), 'true', 'false') as voted_all
FROM callback_votes c
WHERE c.ip='127.0.0.1';
如果他们在每个网站上投票,则返回true;如果他们没有投票,则返回false

SELECT IP, USERNAME, CASE COUNT(DISTINCT SITE_ID) WHEN (SELECT COUNT(DISTINCT ID) FROM SITES) THEN 'VOTED FOR ALL' ELSE 'OTHER' END
FROM callback_votes
GROUP BY IP, USERNAME
如果他们在每个网站上投票,则返回true;如果他们没有投票,则返回false

SELECT IP, USERNAME, CASE COUNT(DISTINCT SITE_ID) WHEN (SELECT COUNT(DISTINCT ID) FROM SITES) THEN 'VOTED FOR ALL' ELSE 'OTHER' END
FROM callback_votes
GROUP BY IP, USERNAME
如果他们在每个网站上投票,则返回true;如果他们没有投票,则返回false

SELECT IP, USERNAME, CASE COUNT(DISTINCT SITE_ID) WHEN (SELECT COUNT(DISTINCT ID) FROM SITES) THEN 'VOTED FOR ALL' ELSE 'OTHER' END
FROM callback_votes
GROUP BY IP, USERNAME

如果他们在每个网站上投票,则返回true;如果他们没有投票,则返回false。

检查计数是否为0

SELECT IP, USERNAME, CASE COUNT(DISTINCT SITE_ID) WHEN (SELECT COUNT(DISTINCT ID) FROM SITES) THEN 'VOTED FOR ALL' ELSE 'OTHER' END
FROM callback_votes
GROUP BY IP, USERNAME
select Count(*) from Sites
where Site_id NOT IN
(select Site_id from Votes where votes.user_ip = '127.0.0.1')
您也可以使用以下方法以相同的成本获得未投票网站的列表

select Site_id from Sites
where Site_id NOT IN
(select Site_id from Votes where votes.user_ip = '127.0.0.1')

检查计数是否为0

select Count(*) from Sites
where Site_id NOT IN
(select Site_id from Votes where votes.user_ip = '127.0.0.1')
您也可以使用以下方法以相同的成本获得未投票网站的列表

select Site_id from Sites
where Site_id NOT IN
(select Site_id from Votes where votes.user_ip = '127.0.0.1')

检查计数是否为0

select Count(*) from Sites
where Site_id NOT IN
(select Site_id from Votes where votes.user_ip = '127.0.0.1')
您也可以使用以下方法以相同的成本获得未投票网站的列表

select Site_id from Sites
where Site_id NOT IN
(select Site_id from Votes where votes.user_ip = '127.0.0.1')

检查计数是否为0

select Count(*) from Sites
where Site_id NOT IN
(select Site_id from Votes where votes.user_ip = '127.0.0.1')
您也可以使用以下方法以相同的成本获得未投票网站的列表

select Site_id from Sites
where Site_id NOT IN
(select Site_id from Votes where votes.user_ip = '127.0.0.1')

你能编辑你的问题并提供样本数据和期望的结果吗?这确实有助于解释复杂的逻辑。如果您确保
(site\u id,ip)
是唯一的,那么它将不再是可欺骗的。但是你需要在应用程序中处理第二次投票尝试。你能编辑你的问题并提供样本数据和期望的结果吗?这确实有助于解释复杂的逻辑。如果您确保
(site\u id,ip)
是唯一的,那么它将不再是可欺骗的。但是你需要在应用程序中处理第二次投票尝试。你能编辑你的问题并提供样本数据和期望的结果吗?这确实有助于解释复杂的逻辑。如果您确保
(site\u id,ip)
是唯一的,那么它将不再是可欺骗的。但是你需要在应用程序中处理第二次投票尝试。你能编辑你的问题并提供样本数据和期望的结果吗?这确实有助于解释复杂的逻辑。如果您确保
(site\u id,ip)
是唯一的,那么它将不再是可欺骗的。但是你需要在应用程序中处理第二次投票尝试。如果我有allhm,它仍然返回false如果我有allHmm,它仍然返回false如果我有allHmm,它仍然返回false如果我有allI,它仍然返回false如果我没有看到
解决方案中的所有行ID都存在
逻辑我没有看到
中的所有行ID都存在
逻辑解决方案中我看不到
所有行ID存在
解决方案中的逻辑我看不到
所有行ID存在
解决方案中的逻辑