2013-08-26 19 views
1

我有问题将下面的查询连接在一起,以便它工作效率更高。可以请某人告诉我如何连接这两个查询,以便它只有一个?如何连接两个表,以查看两个表中是否存在任何值

$rs_duplicate = mysql_query("select count(*) as total 
          from advertisers_account 
          where user_email='$user_email' ") or die(mysql_error()); 

list($total) = mysql_fetch_row($rs_duplicate); 

    } 

$rs_duplicate_pub = mysql_query("select count(*) as total 
           from publishers_account 
           where user_email='$user_email' ") or die(mysql_error()); 

list($totalpub) = mysql_fetch_row($rs_duplicate_pub); 


if ($totalpub || $total > 0) 
{ 
    echo "Not Available "; 

} else { 

    echo "Available"; 
} 
+1

* PSA:* mysql_ *函数是[在PHP 5.5中弃用](http://php.net/manual/en/faq.databases.php#faq.databases.mysql.deprecated)。不建议您编写新的代码,因为这会阻止您将来升级。相反,请使用[MySQLi](http://php.net/manual/en/book.mysqli.php)或[PDO](http://php.net/manual/en/book.pdo.php)和[是一个更好的PHP开发人员](http://jason.pureconcepts.net/2012/08/better-php-developer/)。 –

+0

我也不确定将结果集接收到'list($ total)'中。我相信你应该只使用'$ total'。 – alfasin

回答

1

使用UNION:

SELECT 'advertisers' AS which, count(*) AS total 
FROM advertisers_account 
WHERE user_email = '$user_email' 
UNION 
SELECT 'publishers' AS which, count(*) AS total 
FROM publishers_account 
WHERE user_email = '$user_email' 

这个查询将返回两行,你可以使用which列弄清楚究竟是广告客户或发布。

1

这是你如何做到的。你需要使用连接,但是你应该确保不要让查询中的任何变量直接来自外部用户,比如表单提交。这将为您打开SQL注入。改用Prepared Statements。

select count(*) as total from publishers_account INNER JOIN advertisers_account ON advertisers_account.user_email = publishers_account.user_email WHERE user_email='$user_email' 
1

响应: 是否有人可以告诉我怎么可以连接这两个查询,这样它只有一个?

为什么不:

Select 
(select count(*) as total from advertisers_account where user_email='$user_email') + 
(select count(*) as total from publishers_account where user_email='$user_email') as sumofCount 
1
SELECT count(advertisers_account.id) 
FROM publishers_account 
LEFT JOIN advertisers_account ON publisher_account.email = advertisers_account.email 
WHERE publisher_account.email = '$user_email'; 

如果计数大于零,则邮件在两个表中存在至少一次。如果它只存在于左表(发布者)中,则计数器将为零。如果它在左表中根本不存在,即使它存在于右表中(广告客户)

+0

谢谢大家。很好的反馈。 – user2698144