我在使用涉及联合的sql连接时遇到了问题。我试图从两个表中拉出一个计数和一个字段,但是得到了一个错误。
查询:
$sql_result7 = mysql_query("(SELECT COUNT (*) as alertcount, date as alertdate FROM alerts WHERE to_id='$id' AND date > '$lastcheck') UNION (SELECT COUNT (*) as mailcount, date maildate FROM mobmail WHERE to_id='$id' AND to_del=0 AND seen = '0')", $db);
$rs7 = mysql_fetch_array($sql_result7);
$alerts = $rs7[alertcount];
$mails = $rs7[mailcount];
$last_alert = $rs7[alertdate];
$last_mail = $rs7[maildate];是不是和date as alertdate部件有关?
我得到的错误是:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource
发布于 2012-01-05 08:51:09
除了COUNT和(*)之间的空间之外,还有另一个问题。您不能在PHP代码中使用$rs7[mailcount]或$rs7[maildate],因为您的查询等同于:
SELECT
COUNT(*) as alertcount
, date as alertdate
FROM alerts
WHERE to_id = '$id'
AND date > '$lastcheck'
UNION
SELECT
COUNT(*) --- No "as mailcount" here
, date --- No "as maildate" either
FROM mobmail
WHERE to_id = '$id'
AND to_del = 0
AND seen = '0'并将返回两行且仅返回两列:
alertcount | alertdate
-----------|------------
24 | 2012-01-04
73 | 2011-11-11有两种方法可以解决这个问题:
要么保留查询(将UNION更改为UNION ALL,以确保始终获得2行),然后更改PHP以使用这2行。
或将查询更改为:
SELECT alertcount, alertdate, mailcount, maildate
FROM
( SELECT
COUNT(*) AS alertcount
, date AS alertdate
FROM alerts
WHERE to_id = '$id'
AND date > '$lastcheck'
) AS a
CROSS JOIN
( SELECT
COUNT(*) AS mailcount
, date AS maildate
FROM mobmail
WHERE to_id = '$id'
AND to_del = 0
AND seen = '0'
) AS bhttps://stackoverflow.com/questions/8735942
复制相似问题