これは尋ねられましたが、既存の質問と私のケースとは完全には一致しません。私は2つのテーブルを持っています.最初のテーブルcredentials
はid
username
email
および( に対応する) およびを含むemail-alias
表 。多くの場合、メールは「user.name@domain.com」ですが、エイリアスでは「usern@domain.com」になります。user-id
credentials.id
email
credentials
私が今持っているのは
SELECT `username` FROM `credentials` WHERE `email` LIKE ?
しかし、「usern@domain.com」でクエリを実行すると、メールが常に一致するとは限りません。私がやりたいのは、フォールバックする1つのクエリでユーザー名を取得し、email-alias
「usern@domain.com」を使用してそこから取得し、一致させるuser-id
ために再度使用することですcredentials
username
落とし穴は、提供された電子メールがエイリアス化された「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 | |
+-----------------+--------------+------+-----+---------------------+----------------+