首先 - 你能否告诉我是否有更好的方法可以做到这一点,也许是使用外键......我曾经读过它们但是并不真正理解如何使用它们。
我有两个表,我想从中获取数据。 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来说,返回格式作为数组会很好。
答案 0 :(得分: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,这使得表中的列更容易消除歧义,因此每次需要引用它时都不必键入完整的表名。
要更新LastLogin
,您必须运行单独的UPDATE
查询
外键在这里不会真正帮助您提取数据。 Foregin Keys旨在维护数据完整性。这意味着您要为AccountUsage
上的AccountID设置Foregin Key约束,该约束链接回AccountDetails
,您将无法在AccountUsage
中插入任何未引用的行在AccountDetails
中的一行。这可能有点令人困惑,但外卖是 - 你真的不需要它来提取数据。它只是一种结构特征,可帮助您保持与数据的一致性。