帮助创建MYSQL查询

时间:2011-05-06 19:19:18

标签: mysql pdo

首先 - 你能否告诉我是否有更好的方法可以做到这一点,也许是使用外键......我曾经读过它们但是并不真正理解如何使用它们。

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

所以,我希望你还和我在一起,这是我现在的代码,

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

毕竟 - 关键点是;

  • 外国身份证是否有更好的方法(真的不知道这些是否相关)。

  • 如果没有,你可以帮我查询一下,我觉得需要加入吗?

  • 有没有办法自动将LastLogin更新为今日数据,还是需要其他查询?

非常感谢你 克里斯

编辑:这是我上次使用的一些代码(我将应用程序转换为oop php)。

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

这是在已经运行不同的查询以从第一个表中获取数据之后,理想情况下我希望在1个查询中全部。

对于php来说,返回格式作为数组会很好。

1 个答案:

答案 0 :(得分:1)

  1. 要根据用户的电子邮件获取用户数据,您需要JOIN。您将基于AccountID加入您的表(确保它们是两个表上的Primary Key,因此它很快)并且您将在AccountEmail子句中测试WHERE。确保AccountEmail列上有索引,因此也很快。

    查询:

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

    我将AD和AccountUsage别名为AU,这使得表中的列更容易消除歧义,因此每次需要引用它时都不必键入完整的表名。

  2. 要更新LastLogin,您必须运行单独的UPDATE查询

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