これは尋ねられましたが、既存の質問と私のケースとは完全には一致しません。私は2つのテーブルを持っています.最初のテーブルcredentialsはid usernameemail
および( に対応する) およびを含むemail-alias表 。多くの場合、メールは「user.name@domain.com」ですが、エイリアスでは「usern@domain.com」になります。user-idcredentials.idemailcredentials
私が今持っているのは
SELECT `username` FROM `credentials` WHERE `email` LIKE ?
しかし、「usern@domain.com」でクエリを実行すると、メールが常に一致するとは限りません。私がやりたいのは、フォールバックする1つのクエリでユーザー名を取得し、email-alias「usern@domain.com」を使用してそこから取得し、一致させるuser-idために再度使用することですcredentialsusername
落とし穴は、提供された電子メールがエイリアス化された「usern@..」または「user.name@..」のいずれかである可能性があることです。
mysql> describe `email-alias`;
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user-id | int(11) | NO | UNI | NULL | |
| email | varchar(100) | YES | | NULL | |
+---------+--------------+------+-----+---------+----------------+
mysql> describe `credentials`;
+-----------------+--------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(100) | NO | UNI | NULL | |
| email | varchar(100) | NO | | NULL | |
+-----------------+--------------+------+-----+---------------------+----------------+