Sto lavorando con un'applicazione che utilizza phpActiveRecord
e mySQL per estrarre i dati da una rete di sensori e tracciarli su un numero di grafici flot.js sul client.Restituzione di una seconda riga di una query SQL
Ci sono diversi intervalli di tempo in cui l'utente può scegliere di influenzare l'intervallo di dati visualizzati dai grafici. 2hrs, 24hrs, 3 days and 1 week.
I sensori vengono inviati al database ogni 60 secondi, quindi quando si tracciano i grafici, la query recupera tutte le righe tra now and DATE_SUB(CUR_DATE - INTERVAL ? DAY)
dove? è 1, 3 o 7, ecc.
Tuttavia, questo risulta in un numero elevato di righe restituite (60,000 + for the full week!)
e causa enormi ritardi e errori del server.
So che posso aumentare in modo massiccio la memoria massima disponibile per le query nel file php.ini
, ma questa non è certo una buona soluzione e non risolve il problema della velocità.
La mia domanda è, c'è un modo per selezionare facilmente solo ogni seconda o terza riga dell'intervallo di date richiesto in base alla lunghezza dell'intervallo che l'utente desidera visualizzare?
In C o Java vorrei fare qualcosa come un modulo select per restituire righe alternate ma non riesco a pensare a un modo per farlo nel framework corrente.
Qualsiasi idea sarebbe apprezzata. Grazie.
http://stackoverflow.com/questions/858746/how-do-you-select-every-n-th-row-from-mysql –
Grazie Josh, questi sono ottimi collegamenti, ma purtroppo il modo in cui l'app è strutturato e generato dinamicamente significa che l'uso delle variabili utente è essenzialmente fuori questione. Le query sono gestite dal framework di routing slim.js e non direttamente richiamate dalla pagina del browser. Lo apprezzo comunque! Grazie. – bisslad
Se il tuo ID è incrementale puoi usare quello (aggiungi un "è strano" come o è multiplo di 4/8 e così via alla tua dichiarazione WHERE) Inoltre: hai preso in considerazione l'uso della cache per i tuoi querys?Anche se tu potessi semplicemente usare mysql_result_cache, aumenteresti molto la tua performance. –