2016-10-09 3 views
1

Tabellenstruktur gefunden:
Mysql: anzeigen 0 und Bewegungsart, wenn kein Ergebnis

reference|transaction|member|summary|amount|action_by|created_at(unix timestamp) 

Mein aktueller Sql ist: für die Zahlung gefunden

select COALESCE(sum(`amount`) , 0) as `amount` , `transaction` 
from `transactions` 
where 
    `transaction` IN ('payment', 'deposit', 'withdraw') and 
    `created_at` >= unix_timestamp(DATE_SUB(NOW(), INTERVAL 15 DAY)) 
group by transaction 

Lassen Sie uns sagen, es gibt keine Aufzeichnungen. Ich möchte immer noch auf das Ergebnis kommen. Gerade jetzt das aktuelle Ergebnis ist:

100 | deposit 
200 | withdraw 

Wie weit ich brauche, ist:

100 | deposit 
200 | withdraw 
0 | payment 

ich einige Dinge ausprobiert, aber ich konnte nicht das gewünschte Ergebnis produzieren. Bitte helfen, ich bin Anfänger in SQL. Danke im Voraus.

+0

Warum gibt es ein Laravel-Tag – tam5

+0

Warum brauchen Sie es in SQL? Könnten Sie auch in PHP das gewünschte Ergebnis erzielen? –

Antwort

0

Sie müssen eine separate Tabelle mit jedem eindeutigen transaction Wert haben. Dies kann entweder mit einer separaten Tabelle durchgeführt werden oder Sie können wie unten eine abgeleitete Tabelle verwenden:

SELECT COALESCE(sum(`amount`),0) as amount, der.transaction_type 
FROM (SELECT 'payment' as transaction_type 
UNION SELECT 'deposit' 
UNION SELECT 'withdraw') der 
LEFT JOIN `transactions` t on t.transaction=der.transaction_type AND `transaction` AND `created_at` >= unix_timestamp(DATE_SUB(NOW(), INTERVAL 15 DAY)) 
group by der.transaction_type 

Diese Show sein wird, aber wenn die Tabelle in ihm nicht viele Zeilen hat, dann sollte es nicht sein, zu groß. Es wird viel besser, wenn Sie eine dedizierte Tabelle und Indizes für die Spalten haben

Verwandte Themen