2010-04-26 7 views
6

Ho 3 tabelle con una colonna in ciascuna di esse che si riferiscono a un ID per riga. Sto cercando una query di istruzione sql che verificherà tutte e 3 le tabelle per tutte le righe nelle ultime 24 ore (86400 secondi), ho memorizzato data e ora in ciascuna tabella nella colonna time.Query SQL complessa ... 3 tabelle e sono necessarie le più popolari nelle ultime 24 ore utilizzando i timestamp

Dopo aver ottenuto questa query, sarà in grado di eseguire il passaggio successivo che è quindi controllare per vedere quanti degli ID si ripetono in modo da poter quindi ordinare dal più popolare nell'array e limitarlo ai primi 5 ...

Tutte le idee sono benvenute! :)

Grazie in anticipo.

Stefan

risposta

10
SELECT id, COUNT(*) AS cnt 
FROM (
     SELECT id 
     FROM table1 
     WHERE time >= NOW() - INTERVAL 1 DAY 
     UNION ALL 
     SELECT id 
     FROM table2 
     WHERE time >= NOW() - INTERVAL 1 DAY 
     UNION ALL 
     SELECT id 
     FROM table3 
     WHERE time >= NOW() - INTERVAL 1 DAY 
     ) q 
GROUP BY 
     id 
ORDER BY 
     cnt DESC 
LIMIT 5 
+1

Holy crap. Ho sentito parlare di ninja MySQL, ma non penso di averne mai incontrato uno. – dclowd9901

+0

Solo testando questo :) Due secondi! –

+0

Non ha ricevuto errori, ma non ho ottenuto alcun risultato? Uso la funzione php time() per memorizzare il timestamp nella colonna del tempo in ogni tabella ... hmmm qualche idea? Grazie ancora! In breve, questa query valuterà quale ID ha il maggior numero di occorrenze nelle ultime 24 ore in relazione al suo timestamp e quindi restituirà il 5 superiore corretto? –

Problemi correlati