如何构造一个嵌入式mysql查询,首先选择匹配两列的数据,然后将结果匹配到第三列?

如何构造一个嵌入式mysql查询,首先选择匹配两列的数据,然后将结果匹配到第三列?,mysql,passwords,Mysql,Passwords,我有一个用户密码系统,我需要1)对照数据库中存储的两个潜在密码检查用户密码,2)如果找到匹配项,确保用户电子邮件与存储在具有匹配密码的行中的用户电子邮件匹配 这是当前mysql,我必须在登录时提取唯一用户: $sql = "SELECT * FROM users WHERE email='$u' AND password='$p' OR password_two='$p'"; 这在绝大多数情况下都有效,但当多个用户拥有相同的密码时(例如,如果多个用户拥有密码“123456”),则会失败。我假设

我有一个用户密码系统,我需要1)对照数据库中存储的两个潜在密码检查用户密码,2)如果找到匹配项,确保用户电子邮件与存储在具有匹配密码的行中的用户电子邮件匹配

这是当前mysql,我必须在登录时提取唯一用户:

$sql = "SELECT * FROM users WHERE email='$u' AND password='$p' OR password_two='$p'";
这在绝大多数情况下都有效,但当多个用户拥有相同的密码时(例如,如果多个用户拥有密码“123456”),则会失败。我假设这是因为我上面的AND或设置不正确

我已将sql查询更新为以下语句:

$sql = "SELECT * FROM (SELECT * FROM users WHERE password='$p' OR password_two='$p') WHERE email = '$u' ";

此查询不适用于任何用户-有人能帮我确定查询哪里出错吗?

如果我正确理解了问题,您正在寻找:

$sql = "SELECT * FROM users WHERE email='$u' AND (password='$p' OR password_two='$p')";
如果没有括号,则解释为:

$sql = "SELECT * FROM users WHERE (email='$u' AND password='$p') OR (password_two='$p')";

如果我正确理解了这个问题,您正在寻找:

$sql = "SELECT * FROM users WHERE email='$u' AND (password='$p' OR password_two='$p')";
如果没有括号,则解释为:

$sql = "SELECT * FROM users WHERE (email='$u' AND password='$p') OR (password_two='$p')";

如果您将其更改为
选择来自用户的电子邮件
,会发生什么?如果您将其更改为
选择来自用户的电子邮件
,会发生什么?啊-确实如此。感谢您澄清操作顺序。当期限到期时,我们将接受。没问题。在几乎所有语言中,AND和OR都是等权重运算,因此将从左到右解析(无论如何,在LR语言中)。它们也是二进制运算符,这意味着它们从左到右分组2个元素。这就是为什么a和b或c表示((a和b)或c)。:)啊-当然是这样。感谢您澄清操作顺序。当期限到期时,我们将接受。没问题。在几乎所有语言中,AND和OR都是等权重运算,因此将从左到右解析(无论如何,在LR语言中)。它们也是二进制运算符,这意味着它们从左到右分组2个元素。这就是为什么a和b或c表示((a和b)或c)。:)