用户注册时,可能会将2个表连接在一起

时间:2013-09-16 18:57:50

标签: php sql database select join

所以这是我第一次做在线角色扮演游戏(MMORPG),这是一款基于浏览器的口袋妖怪游戏。

在数据库中,我创建了2个表格;

1.Pokemons(列; ID#,PokemonName,PokemonType,Level,Exp,HPoints,ATT,DEF) 2.Users(列; ID,全名,电子邮件,用户名,密码)

在“注册”字段中,他们输入了他们的信息(用户,通行证,电子邮件),然后选择一个Starter Pokemon进行战斗。我的问题是我如何将其解释为将初学者口袋妖怪连接到该用户的SQL / PHP命令,反之亦然?

我知道它是

SELECT * FROM table_name;

但是,假设我想选择刚刚注册的用户。 *会自动选择该播放器,还是会从“用户”列表中选择所有内容(目前表中有3行用户)。

我现在正在阅读w3schools,但需要一些关于我应该如何处理的实时建议。再次感谢!

thepokemonrpg.x10.mx如果你们想看看我的意思。

1 个答案:

答案 0 :(得分:1)

这确实会从Users表中选择所有

SELECT * FROM Users

*并不代表所有记录,它只是指任何匹配记录的所有列。但是,由于没有过滤器,所有记录恰好都是匹配的记录。如果您只想从该表中选择一条记录,则需要添加WHERE子句:

SELECT * FROM Users WHERE Username='someusername'

有几种不同的方法可以构造SQL查询以包含类似的值(因为someusername可能来自变量而不是像这样明确地编写)。在构建这些查询时,请注意SQL injection vulnerabilities。您不希望意外地发布用户可以编写自己的数据库代码并在服务器上执行它的网站。

至于加入表格,我目前看不到你能做到的方法。这两个表定义了两个不同的实体,但无法相互关联。有几种方法可以做到这一点,具体取决于这些实体的实际关联方式。为此:

  • 口袋妖怪总是拥有0或1个拥有者吗?或;
  • 一个人总是有0或1个口袋妖怪吗?或;
  • 口袋妖怪可以有很多拥有者吗?一个人有很多口袋妖怪吗?

如果第一个语句为真,那么您可以在UserId表中添加Pokemons列,并将其设为foreign keyUsers。这样每个Pokemon记录都会指示哪个用户拥有它。

如果第二个语句为真,那么您可以在PokemonId表中添加Users列,并使其成为Pokemons表的外键。这样每个用户记录都会指示哪个Pokemon当前拥有。

如果第三个语句为真,那么您需要添加一个连接表来维护这种多对多关系。像这样:

PokemonUsers
------------
Id
PokemonId
UserId

此表中的每条记录基本上都是Users表中的记录与Pokemons表中的记录之间的链接。