0

我目前正在为我的网站创建一个投票模块,我必须检查用户是否已经投票,它只会从投票日志中选择 *,我的脚本会为每次投票插入一条新记录,所以假设你在站点 1 上投票不同的记录,然后说您是否投票给站点 2。

列是站点和用户名。我无法检查他们是否在一个 php mysql 查询 SELECT * FROM TABLE_NAME 中根据他们的用户名对所有网站进行了投票

然后以这种方式整理信息,但我无法理解它....

一如既往地感谢任何帮助!

4

1 回答 1

0

这是我将如何设置它:

用户表:

CREATE TABLE users(    
    userid    INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
    username  VARCHAR(50) NOT NULL,
    UNIQUE INDEX(username)
);

网站表:

CREATE TABLE sites(    
    siteid    INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
    sitename  VARCHAR(50) NOT NULL,
    UNIQUE INDEX(sitename)
);

投票表:

CREATE TABLE votes(    
    timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
    userid INT UNSIGNED NOT NULL,
    siteid INT UNSIGNED NOT NULL,
    UNIQUE INDEX(userid,siteid)
);

当用户投票时:

INSERT INTO votes(userid,siteid) VALUES ("$userid","$siteid")

要查看用户投票的网站:

SELECT sites.sitename FROM sites
INNER JOIN votes ON sites.siteid=votes.voteid
WHERE votes.userid="$userid"

要查看用户未投票的网站(如果没有返回任何行,则用户已在每个网站上投票):

SELECT sitename FROM sites
WHERE siteid NOT IN (
    SELECT siteid FROM votes WHERE userid="$userid"
)

我喜欢这个解决方案,因为这样你就可以显示用户没有投票的网站。

最后一点:(1)永远不要在生产环境中使用“SELECT * FROM table”;这是可怕的表现。始终选择您需要的唯一行。并且 (2) 一定要在查询中引用用户输入以避免 SQL 注入攻击。

于 2012-08-08T20:23:33.503 回答