ошибка MySQL UNION - PullRequest
       3

ошибка MySQL UNION

0 голосов
/ 05 января 2012

У меня проблемы с объединением sql с участием объединения.Я пытаюсь получить COUNT и поле из 2 таблиц, но получаю сообщение об ошибке.

Запрос:

$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

1 Ответ

2 голосов
/ 05 января 2012

Помимо пробела между COUNT и (*), есть еще одна проблема. Вы не можете использовать $rs7[mailcount] или $rs7[maildate] в своем коде PHP, потому что ваш запрос эквивалентен:

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'

и вернет две строки и только 2 столбца:

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 b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...