来自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].' 

我不想比较表只是想匹配

+0

我们需要知道桌子上的连接条件是什么。之后这是一个非常简单的查询。 – 2013-03-12 19:51:44

如果我理解你的问题提得好:

你要寻找的是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'; 

但是,这可能会导致各种各样的坏。