2016-05-05 11 views
5

Ho due tabelle: t1scegliere tra due tabelle con il gruppo per data

Tabella:

id | date_click 
1 | 2016-02-31 17:17:23 
2 | 2016-03-31 12:11:21 
3 | 2016-03-31 13:13:23 

Quindi, da questo tavolo voglio ottenere campo di conteggio Id per ogni giorno.

Per questo io uso query successiva:

SELECT date_format(date_click, '%Y-%m-%d') as date_click_event 
    , COUNT(id) as count_click 
    FROM t1 
GROUP 
    BY date_click_event 
ORDER 
    BY date_click_event DESC; 

E 'un lavoro buono.

Quindi la tabella successiva è t2.

id | count | date_sent 
1 | 33 | 2016-02-31 11:12:23 
2 | 22 | 2016-03-31 14:11:22 
3 | 11 | 2016-03-31 13:12:13 

per selezionare i dati in base alla data da questa tabella che uso query successiva:

SELECT date_format(date_sent, '%Y-%m-%d') as date_sent_push 
    , SUM(count) as count_sent 
    FROM t2 
GROUP 
    BY date_sent_push 
ORDER 
    BY date_sent_push DESC 
LIMIT 100; 

E 'anche un buon lavoro. Quindi il mio scopo è unire queste due domande in uno SELECT che successivamente posso scrivere in php una tabella con il conteggio Id per data dalla tabella t1 e con il conteggio del campo count dalla tabella t2 per data.

quando provo query successiva:

SELECT date_format(t2.date_sent, '%Y-%m-%d') AS date_sent_push 
    , SUM(t2.count) as count_sent 
    , COUNT(t1.id) as count_click 
    FROM t2 
    , t1 
WHERE date_format(t2.date_sent, '%Y-%m-%d') = date_format(t1.date_click, '%Y-%m-%d') 
GROUP 
    BY date_sent_push 
ORDER 
    BY date_sent_push 
    DESC 
LIMIT 100; 

Non è funzionato. Cosa faccio di sbagliato?

+0

Che cosa si intende con "Non funziona" ..? errore? risultato sbagliato? .. Visualizza anche i risultati previsti. – scaisEdge

risposta

3

Prima di unire questi risultati, quindi raggruppare per giorni e selezionare i campi aggregati. Inoltre è possibile partecipare a queste query, ma può essere un problema se qualche giorno mancano in uno dei due tavoli:

SELECT date_sent_push, 
     MAX(count_click) as count_click, 
     MAX(count_sent) as count_sent 
FROM 
(SELECT date_format(date_click, '%Y-%m-%d') as date_sent_push 
    , COUNT(id) as count_click 
    , NULL as count_sent 
    FROM t1 
    GROUP BY date_sent_push 
    UNION ALL 
    SELECT date_format(date_sent, '%Y-%m-%d') as date_sent_push 
    , NULL as count_click 
    , SUM(count) as count_sent 
    FROM t2 
    GROUP 
    BY date_sent_push 
) as t3 
GROUP BY date_sent_push 

SQL fiddle demo

0
use this code 

(SELECT date_format(date_sent, '%Y-%m-%d') as date_sent_push, SUM(count) as count_sent FROM t2 GROUP BY date_sent_push ORDER BY date_sent_push DESC LIMIT 100) 
UNION 
(SELECT date_format(t2.date_sent, '%Y-%m-%d') AS date_sent_push, SUM(t2.count) as count_sent, COUNT(t1.id) as count_click FROM t2, t1 WHERE date_format(t2.date_sent, '%Y-%m-%d')=date_format(t1.date_click, '%Y-%m-%d') GROUP BY date_sent_push ORDER BY date_sent_push DESC LIMIT 100) 
+0

Errore di ritorno: # 1222 - Le istruzioni SELECT utilizzate hanno un numero diverso di colonne, ma il conteggio delle date in due tabelle è uguale a – user3499878

+0

L'unione richiede uguale numero. di colonne Quindi il no. della colonna dalla prima query di selezione deve essere uguale al n. della colonna dalla seconda query. –