PHP单选*复杂到单词


PHP single select * COMPLICATED TO WORD

>我目前正在为我的网站创建一个投票模块,我必须检查用户是否已经投票,它只会从投票日志中选择 *,我的脚本为每次投票插入一个新记录,所以假设您在站点 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注入攻击。