在MSSQL中加入三个表

时间:2012-01-09 17:06:08

标签: php sql-server join

我在MSSQL中有三个表用于游戏,其结构如下:

煤焦 这是它的查找表:

  • strAccount链接到NGSCUSER的主键,它是 帐户用户名
  • strChar01,这是第一个字符插槽
  • strChar02,这是第二个字符插槽
  • strChar03,这是第三个字符插槽

这些游戏用户表中的主键是字符名

NGSCUSER

  • strUserID帐户用户名
  • strPasswd帐户密码

GAMEUSER

  • strUserId这是角色名称
  • sRank是否该角色是游戏大师

我需要做的是将查询中的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'

3 个答案:

答案 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'

而且,既然我已经引起了你的注意,我想做以下的公益广告:

  1. 我希望您正在清理$username$password,这样您就不会受到SQL注入的影响。
  2. 以纯文本格式存储密码。你应该只将它们存储为盐渍哈希。如果你能做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
 }