我目前正在为我的网站创建一个投票模块,我必须检查用户是否已经投票,它只会从投票日志中选择 *,我的脚本会为每次投票插入一条新记录,所以假设你在站点 1 上投票不同的记录,然后说您是否投票给站点 2。
列是站点和用户名。我无法检查他们是否在一个 php mysql 查询 SELECT * FROM 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 注入攻击。