PHP单选* COMPLICATED TO WORD

时间:2012-08-08 19:29:16

标签: php mysql

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

列是站点和用户名。我不能在一个php mysql查询SELECT * FROM TABLE_NAME

中检查他们是否根据用户名在所有网站上投票

然后按照这种方式对信息进行排序,但我无法绕过它......

任何帮助都会一如既往地受到赞赏!

1 个答案:

答案 0 :(得分: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注入攻击。