2011-05-06 230 views
1

首先 - 你能告诉我是否有更好的方法来做到这一点,也许使用外键......我曾经阅读过有关它们,但并不真正了解如何使用它们。帮助创建一个MYSQL查询

我有两张表,我想从中获取数据。 AccountDetails和AccountUsage这两个表都有一个唯一的AccountID唯一标识,应该为每个用户匹配。
我需要将表AccountDetails中的AccountEmail与用户已经推算的值进行比较,然后如果存在匹配,则从两个表中获取所有数据并更新AccountUsage中的数据。我知道我可能需要另一个查询来更新AccountUsage中的数据,但是如果有其他方法可以提到它,它会将LastLogin更新为今天的日期。

所以,我希望你还是跟我,这是我目前所面对的代码,

SELECT AccountID, AccountPassword, BandID FROM AccountDetails WHERE AccountEmail=? 

了这一切之后 - 的关键点;

  • 是否有与国外ID的一个更好的方法(真不知道如果这些都是在这个培训相关)。

  • 如果不是,你可以帮我查询,我认为需要加入吗?

  • 有没有办法自动将LastLogin升级到今天的数据还是我需要另一个查询?

谢谢你这么多
克里斯

编辑:这是一些代码,我用最后的时间(IM转换到了PHP应用程序)。

SELECT AccountUsage.AccountID, AccountUsage.AccountActive FROM AccountUsage INNER JOIN AccountDetails ON AccountUsage.AccountID=AccountDetails.AccountID WHERE AccountDetails.AccountEmail=? 

这是在已经运行不同的查询从第一个表中获取数据后,idealy我希望它在1查询中。

作为数组返回格式会很好,对于PHP。

+0

我认为你应该真正阅读很多关于SQL,然后创建一些应用程序。获取一些在线教程,向您介绍SQL。 – Marcin 2011-05-06 19:25:00

+0

请添加您的预期输出。 – 2011-05-06 19:25:17

+0

这是一个非常基本的问题,几乎涵盖了所有的mysql教程,我想你可能需要在继续使用你的项目之前阅读mysql的使用。 – eykanal 2011-05-06 19:25:19

回答

1
  1. 要根据他们的电子邮件得到您的用户的数据,你,你确实需要一个JOIN。您将根据AccountID加入您的表格(请确保它是两张表上的Primary Key,因此速度很快),您将在WHERE条款中测试AccountEmail。确保你有一个AccountEmail列的索引,所以它也很快。

    查询:

    SELECT AD.AccountID, AD.AccountPassword, AD.BandID, AU.* 
    FROM AccountDetails AD 
    JOIN AccountUsage AU on AU.AccountID = AD.AccountID 
    WHERE AD.AccountEmail = ? 
    

    我已经别名AccountDetails到AD和AccountUsage非盟,这使得表中消除歧义的列更容易,所以你不必每次需要时都必须键入完整的表名以引用它。

  2. 要更新LastLogin,你必须运行一个单独UPDATE查询

  3. 外键不会真正帮助你拉出来的数据,在这里。 Foregin Keys用于维护数据完整性。这意味着您将在AccountUsage上为AccountID设置Foregin Key约束,该约束返回AccountDetails,并且您将无法将任何行插入到AccountUsage中,该行没有引用回AccountDetails中的一行。这可能有点令人困惑,但外卖是 - 你不需要在这里将数据提取出来。这只是一个结构性功能,可帮助您保持与数据的一致性。

+0

谢谢,完美的作品。如果我要编辑你的代码,可以加入2个以上的表格吗? – Chris 2011-05-06 19:41:57

+1

如果您愿意,可以加入100个表格,只需为要加入的每个表格添加'JOIN

ON ',然后记住编辑'SELECT'原因以获得您需要的正确列。 – 2011-05-06 19:45:24