Visualizzazione risultati 1 fino 7 di 7

Discussione: [sql] Contare click settimanali

  1. #1
    Guest

    Predefinito [sql] Contare click settimanali

    Ciao a tutti ;D

    Sto smattando da ore per creare un elenco delle notizie più "cliccate" dell' ultima settimana... ora cercherò di farvi capire la situazione e cosa mi occorre :)

    Per far ciò registro (1) l orario in formato timestamp di ogni click e (2) l' id della notizia cliccata in una tabella apposta chiama "notizie_click".
    Ci sarà quindi una riga per ogni click effettuato...

    Primo problema
    Come devo impostare la query in modo che mi conti tutti i click di ogni notizia (id_notizia) e mi ordini in modo decrescente i risultati dei conteggi...?

    Secondo problema
    Dopo aver trovato e ordinato l' id_notizia più cliccato della settimana ho bisogno di prendere dalla tabella delle notizie i vari dati che mi occorrono per impostare la pagina...

    Le tabelle in questione sono 2, quella delle notizie (chiamata "notizie") e quella dei click (chiamata "notizie_click").

    la tabella notizie ha 4 campi: id - titolo - testo - autore
    la tabella notizie_click ha 3 campi: id - id_notizia - timestamp

    Il campo in "comune" è quindi notizie.id e notizie_click.id_notizia
    Dico questo perchè penso si debba usare la funzione INNER JOIN...

    So di non esser stato chiarissimo ma penso ci sian tutte le informazioni necessarie per poter ricevere una mano!
    Attendo l' illuminazione da parte di qualcuno di voi e vi ringrazio anticipamente!

  2. #2
    Guest

    Predefinito

    Hai provato ? Dovrebbe essere grosso modo cs

    Codice:
    SELECT count(*) as tot_click,notizie.* FROM notizie_click 
    INNER JOIN notizie ON notizie.id = id_notizia
    group by id_notizia ORDER by tot_click DESC
    Ultima modifica di lottoforlife : 02-03-2011 alle ore 19.00.10

  3. #3
    Guest

    Predefinito

    nn credo che questo ottimizzi il tuo db...
    la tabella ulteriore che hai creato può essere ritenuta addirittura superflua... ma in ogni modo ciò che ti dirò rimane in ogni caso valido

    Non devi creare un record per ogni click... il tuo db scoppierà di questo passo!!!

    puoi fare in questo modo:
    - aggiungi un campo alla tua tabella articoli e impostalo di default a 0
    - oppure tieniti la tabella che hai creato ma quando inserisci un nuovo articolo crea un unico record per quell'articolo e impostalo a 0.

    ora la query di incremento del clik sarà un semplice UPDATE +1 cioè

    UPDATE tabella
    SET numero_click=numero_click+1
    WHERE id_articolo= $id_dinamico

    a quel punto potrai fare un banale SELECT
    SELECT numero_click FROM tabella WHERE id_articolo=$id

    -------------------------------------------------------------------

    se nn vuoi seguire questa logica devresti fare una query COUNT come ti ha suggerito chi mi ha preceduto.
    Ultima modifica di miniscript : 02-03-2011 alle ore 19.11.39

  4. #4
    Guest

    Predefinito

    Citazione Originalmente inviato da miniscript Visualizza messaggio
    nn credo che questo ottimizzi il tuo db...
    la tabella ulteriore che hai creato può essere ritenuta addirittura superflua... ma in ogni modo ciò che ti dirò rimane in ogni caso valido

    Non devi creare un record per ogni click... il tuo db scoppierà di questo passo!!!

    puoi fare in questo modo:
    - aggiungi un campo alla tua tabella articoli e impostalo di default a 0
    - oppure tieniti la tabella che hai creato ma quando inserisci un nuovo articolo crea un unico record per quell'articolo e impostalo a 0.

    ora la query di incremento del clik sarà un semplice UPDATE +1 cioè

    UPDATE tabella
    SET numero_click=numero_click+1
    WHERE id_articolo= $id_dinamico

    a quel punto potrai fare un banale SELECT
    SELECT numero_click FROM tabella WHERE id_articolo=$id

    -------------------------------------------------------------------

    se nn vuoi seguire questa logica devresti fare una query COUNT come ti ha suggerito chi mi ha preceduto.
    Ma con sto sistema fai un normalissimo contaclick, come diavolo trovi le notizie più cliccate di un determinato periodo se non registri QUANDO vengon fatti sti click?

    Citazione Originalmente inviato da lottoforlife Visualizza messaggio
    Hai provato ? Dovrebbe essere grosso modo cs

    Codice:
    SELECT count(*) as tot_click,notizie.* FROM notizie_click 
    INNER JOIN notizie ON notizie.id = id_notizia
    group by id_notizia ORDER by tot_click DESC
    Perfetto! Grazie mille, gentilissimo
    Ultima modifica di manialink : 02-03-2011 alle ore 19.28.52

  5. #5
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Solo un paio di precisazioni:
    - la prima, che dovresti specificare nella clausola GROUP BY tutti gli attributi su cui esegui il raggruppamento: credo che mettendo GROUP BY notizie.* dovresti risolvere, se così non va devi scrivere tutta la lista degli attributi
    - dovresti aggiungere anche un filtro sulle notizie dell'ultima settimana, usando un WHERE o un HAVING: la differenza tra i due è che WHERE viene eseguito prima del raggruppamento, HAVING viene eseguito dopo. I risultati saranno quindi diversi... valuta tu quale sia il più opportuno.

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  6. #6
    Guest

    Predefinito

    Citazione Originalmente inviato da dementialsite Visualizza messaggio
    Solo un paio di precisazioni:
    - la prima, che dovresti specificare nella clausola GROUP BY tutti gli attributi su cui esegui il raggruppamento: credo che mettendo GROUP BY notizie.* dovresti risolvere, se così non va devi scrivere tutta la lista degli attributi
    - dovresti aggiungere anche un filtro sulle notizie dell'ultima settimana, usando un WHERE o un HAVING: la differenza tra i due è che WHERE viene eseguito prima del raggruppamento, HAVING viene eseguito dopo. I risultati saranno quindi diversi... valuta tu quale sia il più opportuno.

    Stammi bene...
    Grazie per la precisazione demential... è possibile utilizzare l' operatore BETWEEN con l' HAVING?

  7. #7
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Sì, non dovresti avere problemi... il tipo di condizioni è lo stesso. Come detto, cambia solo quando vengono filtrati i record (WHERE prima del raggruppamento, HAVING dopo).

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •