Как структурировать встроенный запрос mysql, чтобы сначала выбрать данные, которые соответствуют двум столбцам, а затем сопоставить результаты с третьим столбцом? - PullRequest
0 голосов
/ 27 декабря 2011

У меня есть система паролей пользователей, в которой мне нужно 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' ";

Этот запрос не работает ни для каких пользователей. Может ли кто-нибудь помочь мне определить, где запрос идет неправильно?

1 Ответ

4 голосов
/ 27 декабря 2011

Если я правильно понимаю вопрос, вы ищете:

$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')";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...