2010-11-19 4 views
2

私は午前中にこれを試しています。今は疲れています。このような結果が欲しいです。 alt textmysqlクエリのヘルプ

これらのテーブルからです。

alt text alt text alt text

誰かが私を助けてください。私もPHPでそれを行う方法を把握することはできません。私は、支払いと請求書のテーブルに日付で参加しようと試みましたが無駄でした。

その購入システムとこのクエリは、すべての支払いの概要と日付別の請求書の合計を表示します。

私は最初に請求書からすべての日付を選択し、その後支払いからすべての日付を選択し、それらの組合を取るソリューションを考えました。その日に請求書があるかどうかを確認し、その日に支払があるかどうかを確認します。しかし、この方法では、あまりにも多くのクエリがあります。

+0

詳しい情報は参考になります。これは、テーブル間にどのような制約があるか、請求対象の合計と支払いが表すもの(companyIdまたはnoで分割されているか)を示していません。 – justkt

+0

mysqlファイルを追加しました。それが役に立つと願っています。 – mysterious

+0

そして、以下の答えは、彼らが助けてくれませんでしたか? – GolezTrol

答えて

2
select 
    x.date, 
    sum(x.invoiceTotal) as invoiceTotal, 
    sum(x.paymentsMade) as paymentMade 
from 
(select 
    i.date, 
    sum(i.rate * i.quantity /*?*/) as invoiceTotal, 
    null as paymentMade  
from 
    invoice i 
    inner join invoiceitem ii on ii.invoiceId = i.invoiceId 
group by 
    i.date 
union all 
select 
    p.date, 
    null as invoiceTotal, 
    sum(p.amount) as paymentMade  
from 
    payment p 
group by 
    p.date) x 
group by 
    x.date 
order by 
    x.date 
+0

実際にダッシュを出力したい場合は、ifnull(sum(x.invoiceTotal)、 ' - ')を使用できます。 – GolezTrol

+0

[Err] 1054 - 'field list'の 'i.rate'列が不明です – mysterious

+0

この解決策は受け入れていますが、何らかのエラーが発生していますが、クエリを使用して別のクエリを作成しました。私はその質問も共有します。この回答を他のユーザーに解決できることを願っています。 – mysterious

0

あなたはあなたの結合を見る必要があります。このウェブサイトを見てください:

http://www.wellho.net/solutions/mysql-mysql-joins-using-left-join-and-right-join-to-find-orphan-rows.html

私はあなたがsimultaneiously発生することが合流したいので、あなたもここを見なければならないと考えている:

http://www.xaprb.com/blog/2006/05/26/how-to-write-full-outer-join-in-mysql/

が適切にあなたの骨材を使用してください。

0
select 
    x.date, 
    sum(x.invoiceTotal) as invoiceTotal, 
    sum(x.paymentMade) as paymentMade 
from 
(SELECT 
Sum((invoiceitem.rate * invoiceitem.quantity)) AS invoiceTotal, 
invoice.`date`, 
null AS paymentMade 
FROM 
     invoice 
     Left Join invoiceitem ON invoice.invoiceId = invoiceitem.invoiceId 
where companyId='6' 
GROUP BY 
     invoice.`date` 
UNION ALL 
SELECT 
null as invoiceTotal, 
    payment.date, 
    sum(payment.amount) as paymentMade  
from 
    payment 
group by 
    payment.date) x 
group by 
    x.date 
order by 
    x.date