我有两个表,sitescallback_votes,其中站点保存可供投票的站点,而callback_votes保存每个站点上已进行的投票。

callback_votes的结构如下:

mysql - 通过列检查选择其他表中是否存在所有行ID-LMLPHP
(来源:gyazo.com

每次有人投票时,回调函数都会将一个新的callback_votes行及其投票的站点ID添加到site_id中,并将用户名,投票的IP地址添加到该行中。

现在,我想做的是,检查用户是否在表站点中的所有站点上都通过给定ip遍历所有callback_votes行进行投票,并检查它是否与site_id表中的sites相匹配。

这是我尝试做的事情:

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的回调中的站点数中没有不同的站点数:

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


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

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

10-16 23:06