我正在为我的网站创建一个投票模块,我必须检查用户是否已经投票,它只会从投票日志中选择*,我的脚本会为每个投票插入一条新记录,所以说你在网站上投票1它是一个不同的记录,然后说你投票给站点2。
列是站点和用户名。我不能在一个php mysql查询SELECT * FROM TABLE_NAME
中检查他们是否根据用户名在所有网站上投票然后按照这种方式对信息进行排序,但我无法绕过它......
任何帮助都会一如既往地受到赞赏!
答案 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注入攻击。