我在MSSQL中有三个表用于游戏,其结构如下:
煤焦 这是它的查找表:
这些游戏用户表中的主键是字符名
NGSCUSER
GAMEUSER
我需要做的是将查询中的PHP变量$ username和$ password的登录详细信息进行比较,最重要的是检查它们的关联字符并找出它是否具有1的sRank
我认为我需要一种三种表连接,但我不知道如何去做任何例子或帮助将不胜感激
这是我到目前为止尝试构建的查询但是第三行上的错误在“CHARS”附近的语法不正确:
SELECT NGSCUSER.strUserID, NGSCUSER.strPasswd, GAMEUSER.sRank
FROM 'CHARS'
INNER JOIN NGSCUSER ON NGSCUSER.strUserId = CHARS.strAccount
INNER JOIN GAMEUSER ON GAMEUSER.strUserId = CHARS.strChar01
INNER JOIN GAMEUSER ON GAMEUSER.strUserId = CHARS.strChar02
INNER JOIN GAMEUSER ON GAMEUSER.strUserId = CHARS.strChar03
WHERE NGSCUSER.strUserId='$username' and NGSCUSER.strPasswd='$password' and GAMEUSER.sRank = '1'
答案 0 :(得分:2)
首先,要真正回答您的问题(可能无法解决您的问题),您需要对表进行别名以连接多个表:
select * from [chars] c
inner join ngscuser n on n.strUserId = c.strAccount
inner join gameuser g1 on g1.strUserId = c.strChar01
inner join gameuser g2 on g2.strUserId = c.strChar02
inner join gameuser g3 on g3.strUserId = c.strChar03
where n.strUserId='$username' and n.strPasswd='$password' and g1.sRank = '1'
但是,如果您尝试撤回与任何字符位置匹配的gameuser
行,则需要使用in
:
select n.strUserID, n.strPasswd, g.sRank
from [chars] c
inner join ngscuser n on n.strUserId = c.strAccount
inner join gameuser g on g.strUserId in (c.strChar01, c.strChar02, c.strChar03)
where n.strUserId='$username' and n.strPasswd='$password' and g.sRank = '1'
而且,既然我已经引起了你的注意,我想做以下的公益广告:
$username
和$password
,这样您就不会受到SQL注入的影响。select * from ngscuser
并获得所有人的密码,那就羞辱你了。耻辱。耻辱。羞。答案 1 :(得分:0)
应该只是CHARS而不是'CHARS'
答案 2 :(得分:0)
这是一个示例函数,用于处理您要求的内容:
function functionName($username,$password){
SELECT tablename.colname AS alias, tablename.colname2 AS alias2, ...
FROM tablename tn
JOIN talbename tn2 on tn2.colname = tn.colname
JOIN anothertable tn3 on tn3.colname = tn2.colname
WHERE tn.colname = $username AND rl.password ='$password'
AND tn3.colname = 1
}