2012-01-05 7 views
0

共用体を含むSQL結合に問題があります。 2つのテーブルからCOUNTと1つのフィールドを取得しようとしていますが、エラーが発生しています。mySQL UNIONのエラー

クエリ:それはdate as alertdate一部とは何か

$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]; 

ですか?

エラーイム取得は次のとおりです。COUNT(*)との間のスペースに加え

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

+0

かにクエリを変更しますか? –

+0

どのようなエラーがありましたか? – DonCallisto

+0

また、私のmySQLは錆びていますが、 "date date"ではなく "maildate"という日付を持っています。また、「日付」は予約語ではありませんか? –

答えて

2

、別の問題があります。

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行のみ2列が返されます:解決する

alertcount | alertdate 
-----------|------------ 
24  | 2012-01-04 
73  | 2011-11-11 

2つの方法があなたのクエリは同等ですので、あなたは、あなたのPHPコードで$rs7[mailcount]$rs7[maildate]を使用することはできませんこの問題:

UNIONUNION ALLに変更して、常に2行を取得するようにしてください。 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 
+0

なぜそれがうまくいかないのか不思議でした。どうすればこの問題を解決できますか?両方のクエリ結果を返すためにUNION ALLまたは何かを使用する必要がありますか? – user1022585

+0

PHPの2行目の結果を使用できますか? –

+0

この内部結合クエリの前に、2つの別個のクエリが代わりに機能しましたが、この新しいクエリでは、何をすべきかはしていません。それは正しい 'mailcount'を返さない – user1022585