来自PHP变量的3个表中的MYSQL查找电子邮件
问题描述:
我有三个表safe_workers, safe_companies and safe_customers
,用于存储不同的账户类型。登录后,我需要一个查询来查找所有三个表中的LoginEmail和LoginPassword列,并根据登录页面传递的登录表单返回匹配结果。来自PHP变量的3个表中的MYSQL查找电子邮件
我是MySQL的初学者,并试过以下内容,但显然它返回一个错误。
select safe_companies.LoginEmail,ID
from safe_companies,safe_customers
WHERE LoginEmail='.$_POST[InEmail].' AND LoginPass= '.$_POST[InPass].'
我不想比较表只是想匹配
答
如果我理解你的问题提得好:
你要寻找的是http://dev.mysql.com/doc/refman/5.0/en/join.html
如果两个表具有一个名为LoginEmail的列。
SELECT
sco.LoginEmail
FROM
safe_companies AS sco
INNER JOIN
safe_customers AS scu ON (sco.LoginEmail = scu.LoginEmail)
WHERE
sco.LoginEmail = '" . $_POST['InEmail'] . "' AND
scu.LoginPass = '" . $_POST['InPass'] . "'
如果不是,请提供更多信息,如表格结构。
答
我不知道我是否理解正确,但如果我这样做了,您可以使用UNION
声明来实现。试试这个:
$where = 'WHERE LoginEmail = "'.$_POST['inEmail'].'" AND LoginPass = "'.$_POST['inPass'].'"';
$query = array();
foreach (array('safe_workers', 'safe_companies', 'safe_customers') as $table) // Your tables
$query[] = '(SELECT LoginEmail, ID FROM '.$table.' '.$where.')';
var_dump(implode(' UNION ', $query)); // Replace var_dump() with your custom method to execute queries
+0
谢谢vcampitelli !!该解决方案工作!我不明白加入,但这是我名单上的下一个要研究的东西。 – 2013-03-12 20:43:02
答
我正在根据你的问题的细节,对于特定用户的注册邮箱和LoginPass值将在三个表的一个只存在一种假设。如果是这种情况,你可以像下面这样使用UNION。
SELECT a.LoginEmail, a.ID
FROM (
SELECT LoginEmail, ID FROM safe_workers
UNION
SELECT LoginEmail, ID FROM safe_companies
UNION
SELECT LoginEmail, ID FROM safe_customers
) AS a
WHERE a.LoginEmail = 'InEmail' AND a.LoginPass= 'InPass';
但是,这可能会导致各种各样的坏。
我们需要知道桌子上的连接条件是什么。之后这是一个非常简单的查询。 – 2013-03-12 19:51:44