如何搜索值e。 G。具有不同列的几个表中的电子邮件地址?或优化我的查询?
我的例子
$email = 'some_email@example.com';
$email = "SELECT a.email_one, a.email_two,b.email_three
FROM first_table AS a, second_table AS b
WHERE a.email_one = $email OR b.email_two = $email";
谢谢!
答案 0 :(得分:1)
如果它可以出现在两个表中,但两个表之间没有相关数据,只需在两个表的查询之间使用UNION
SELECT a.email, 'from-first-table' from first_table a where ...
UNION
SELECT b.email, 'from-second-table' from second_table b where ...
答案 1 :(得分:0)
SELECT a.email_one, b.email_two
FROM first_table AS a inner join second_table AS b
ON a.email_one=b.email_two and a.email_one='".$email."'
答案 2 :(得分:0)
在列之间展示数组(在您的情况下是电子邮件)几乎总是一个糟糕的架构设计。而是在额外的表中使用多行:
SELECT ...
FROM Main
JOIN Emails USING(user_id)
WHERE Emails.email = '$email';
Emails: INDEX(email, user_id)
效率很高;每个用户允许0,1,2或2个以上的电子邮件。