>我目前正在为我的网站创建一个投票模块,我必须检查用户是否已经投票,它只会从投票日志中选择 *,我的脚本为每次投票插入一个新记录,所以假设您在站点 1 上投票这是一个不同的记录,然后说您是否投票给站点 2。
列是站点和用户名。我无法检查他们是否在一个 php mysql 查询中根据他们的用户名在所有网站上投票 从TABLE_NAME中选择 *
然后以这种方式对信息进行排序,但我无法绕开它......
一如既往地感谢任何帮助!
以下是我的设置方式:
用户表:
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注入攻击。