我在将以下查询连接在一起时遇到问题,因此它的工作效率更高。有人能告诉我如何将这两个查询连接起来,使其成为唯一的查询吗?
$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";
}
使用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
列来判断它是广告商还是出版商。
这就是你可以做到的。你需要使用联接,但你应该确保查询中的任何变量都不直接来自外部用户,比如表单提交。这将为您打开SQL注入的大门。请改用"准备好的语句"。
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'
响应:有人能告诉我如何将这两个查询连接起来,使其成为唯一的查询吗?
为什么不:
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
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';
如果计数大于零,则该电子邮件在两个表中至少存在一次。如果它只存在于左表(发布者)中,那么计数器将为零。如果它根本不存在于左表中,那么即使它确实存在于右表(广告商)
中,也不会得到任何行