Newsgroup: it.comp.www.php
Titolo: Query Mysql (scusate l'OT)

Salve a tutti, dovrei eseguire una query che restituisca i 4 utenti che 
hanno uploadato più files nel mio sito.
La query che mi avete suggerito e che funziona correttamente è (vista ieri 
qui grazie all'aiuto di yag):
SELECT id_usr, count(*) as 'numricette'
FROM files_fls
GROUP BY id_usr
ORDER BY numricette desc limit 0,3
1) Il problema è che che dopo aver ordinato gli utenti che hanno inserito 
più record in base all'id_usr (intero), dovrei mettere nel recordset anche 
la relativa username che si trova nella tabella users_usr (altra tabella). 
Il campo relativo alla user name è name_usr che sta appunto nella tabella 
users_usr.
2) Vorrei aggiungere anche un'altra condizione di selezione degli utenti che 
hanno inserito più record. Ovvero vorrei che venissero selezionati i primi 4 
utenti che hanno inserito più records ma durante gli ultimi 7 giorni.
Posso fare tutto ciò con un'unica query?
Scusate se sono OT.... e grazie 

Massimiliano ha scritto:

devi usare gli inner join...ad esempio:
SELECT users_usr.name_usr, count(*) as 'files_fls.numricette'
FROM files_fls
INNER JOIN users_usr ON (files_usr.id_usr = 
user_usr.id
)
etc etc...
(non testato ma dovrebbe funzionare)
-- 
Saluti
Web Inside

 Web Inside
Seguendo il tuo consiglio ho scritto la seguente query:
SELECT id_usr, count(*) as 'numricette'
FROM files_fls
INNER JOIN users_usr ON (files_fls.id_usr=users_usr.id_usr)
GROUP BY id_usr
ORDER BY numricette desc limit 0,3
ma ricevo in risposta che:
colonna id_usr di field list è ambigua.
Cosa è sbagliato?? 

 Cosa è sbagliato?? 
devi mettere anche il nome della tabella alla quale fai riferimento come 
ti avevo fatto nell'esempio (users_usr.name_usr che stà per 
nome_tabella.campo_tabella)
-- 
Saluti
Web Inside

 Web Inside
Grazie, la query ora funziona bene ed è:
SELECT files_fls.id_usr, count(*) as 'numricette', users_usr.name_usr
FROM files_fls
INNER JOIN users_usr ON (files_fls.id_usr=users_usr.id_usr)
GROUP BY id_usr
ORDER BY numricette desc limit 0,3
Però come posso superare il problema di selezionare i primi 4 utenti che 
hanno inserito più record negli ultimi 7 giorni?
Non voglio approfittare della vostra pazienza ma se aveste consigli... sono 
bene accetti.
Grazie ancora 

 bene accetti.
...ORDER BY numricette desc limit 0,9
così selezioni i primi 10 record... ;-)
-- 
Saluti
Web Inside

 Web Inside
Scusami ma sono stato poco chiaro io. Di record ne devo tirare fuori solo 4 
e quindi 'limit 0,3' va bene. Nella tabella files_fls č presente un campo 
'data' di tipo datetime e quindi ad ogni file uploadato č associata la data 
e l'ora di inserimento. Io vorrei che nell'estrazione dei 4 utenti che hanno 
inserito piů record venissero tenuti in conto solo i records inseriti negli 
ultimi 7 giorni.
Spero di essere stato chiaro...
Grazie :) 

Per i fini suddetti ho scritto la seguente query:
SELECT files_fls.id_usr, count(*) as 'numricette', users_usr.name_usr
FROM files_fls INNER JOIN users_usr ON (files_fls.id_usr=users_usr.id_usr)
WHERE DATE_SUB(CURTIME(),INTERVAL 7 DAY) <= files_fls.data;
GROUP BY id_usr
ORDER BY numricette desc limit 0,3
Perň mi genera un errore di sintassi.
Qualcuno sa dirmi perchč?
Grazie davvero! 

Chiedo scusa la query:
SELECT files_fls.id_usr, count(*) as 'numricette', users_usr.name_usr
FROM files_fls INNER JOIN users_usr ON (files_fls.id_usr=users_usr.id_usr)
WHERE DATE_SUB(CURTIME(),INTERVAL 7 DAY) <= files_fls.data
GROUP BY id_usr
ORDER BY numricette desc limit 0,3
non dà errore di sintassi ma non estrae alcun record... nonostante dei file 
rientrino in questa finestra temporale.
L'errore deve essere un altro...
Grazie lo stesso 

 ultimi 7 giorni.
Se usi il timestamp unix è sufficente fare un controllo su di esso, ad 
esempio
...WHERE time >=."time()-604800". e il seguito della query.
-- 
Saluti
Web Inside