Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481

    Query con order by prima della where

    Ho una tabella con l'accesso di utenti strutturata così
    id id_utente data_ora_accesso pagina_visitata
    1 1 2014-11-07 10:24:09.000000 p1
    2 1 2014-11-08 10:24:09.000000 p1
    3 1 2014-11-09 10:24:09.000000 p2
    4 2 2014-11-18 10:24:09.000000 p2
    5 2 2014-11-19 10:24:09.000000 p1
    6 3 2014-11-28 10:24:09.000000 p1
    7 3 2014-11-29 10:24:09.000000 p1

    ogni istanza quindi rappresenta il singolo accesso di ogni singolo utente in una data ora ad una data pagina. Sto cercando (invano) di estrarre solo gli id_utente dei soli utenti che hanno fatto come loro ultimo personale accesso alla pagina "p1"...quindi praticamente il risultato dovrebbe essere questo:

    id id_utente data_ora_accesso pagina_visitata
    1 1 2014-11-07 10:24:09.000000 p1
    2 1 2014-11-08 10:24:09.000000 p1
    3 1 2014-11-09 10:24:09.000000 p2
    4 2 2014-11-18 10:24:09.000000 p2
    5 2 2014-11-19 10:24:09.000000 p1
    6 3 2014-11-28 10:24:09.000000 p1
    7 3 2014-11-29 10:24:09.000000 p1


    Ho provato con una query nidificata così:
    Codice PHP:
    SELECT id_utente
    FROM 
    (
      
    SELECT id_utenteMAX(data_ora_access), pagina_visitata
      FROM tbl
      GROUP BY id_utente
      ORDER BY MAX
    (data_ora_accessDESC
      
    ) AS _b
    WHERE pagina_visitata
    ='p1' 
    Ma non funziona qualcosa sulla query nidificata, il problema sta nella selezione della sola ultima istanza (in termini del valore data_ora_accesso) per ogni singolo utente.

    La query nidificata praticamente dovrebbe estrarre solo l'ultima istanza che, tra tutte le visite che ogni singolo utente ha fatto, rappresenta l'ultima visita, poi scremo questo risultato con la WHERE della query principale, ma c'è qualcosa che non riporta...

    Qualcuno ha un'idea migliore?
    Ultima modifica di james; 29-11-2014 a 13:23

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Io metterei

    codice HTML:
    SELECT id_utente
    FROM (
      SELECT id_utente, MAX(data_ora_access), pagina_visitata
      FROM tbl
      GROUP BY id_utente, pagina_visitata
      ORDER BY MAX(data_ora_access) DESC
      ) AS _b
    WHERE pagina_visitata='p1'  
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    mi sembra più semplice così, senza nidificare

    codice:
    SELECT id_utente, MAX(data_ora_accesso) as maxData, pagina_visitata 
         FROM test.data_ora_max
         WHERE pagina_visitata = 'p1'
         GROUP BY id_utente
         ORDER BY id DESC;

  4. #4
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Io metterei

    codice HTML:
    SELECT id_utente
    FROM (
      SELECT id_utente, MAX(data_ora_access), pagina_visitata
      FROM tbl
      GROUP BY id_utente, pagina_visitata
      ORDER BY MAX(data_ora_access) DESC
      ) AS _b
    WHERE pagina_visitata='p1'  
    Ho provato ma non funziona, sbaglia a fare l'estrazione

  5. #5
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481
    Quote Originariamente inviata da clasku Visualizza il messaggio
    mi sembra più semplice così, senza nidificare

    codice:
    SELECT id_utente, MAX(data_ora_accesso) as maxData, pagina_visitata 
         FROM test.data_ora_max
         WHERE pagina_visitata = 'p1'
         GROUP BY id_utente
         ORDER BY id DESC;
    Stessa cosa per la tua soluzione, non mi pesca gli utenti che hanno come ultima visita la pagina p1, ma pesca anche quella che hanno visitato la p1 non come ultima visita

  6. #6
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    E cosi ?

    codice:
    select t1.id_utente, 
    ( select t2.id_utente, MAX(t2.data_ora_access) as max_data
      from tbl t2
      where t1.id_utente = t2.id_utente
      group by id_utente)
    from tbl t1
    where t1.data_ora_access = max_data and t1.pagina_visitata='p1'
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  7. #7
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Oppure cosi ?

    Codice PHP:
    select from tlb t1
    where 
    data_ora_access 

    (
    select max(data_ora_accessfrom tbl t2
     where t1
    .id_utente t2.id_utente
    )
    and 
    pagina_visitata='p1' 
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  8. #8
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Oppure cosi ?

    Codice PHP:
    select from tlb t1
    where 
    data_ora_access 

    (
    select max(data_ora_accessfrom tbl t2
     where t1
    .id_utente t2.id_utente
    )
    and 
    pagina_visitata='p1' 
    La seconda mi blocca tutto, la prima mi da errore...

  9. #9
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Quanti record hai nella tabella ?

    Quale errore ti dà la prima ?
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  10. #10
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481
    Ho scoperto la causa, il problema è che l'uso di GROUP BY in mysql è un po' ambiguo...ho trovato un articolo che spiega bene perché la query che usavo io all'inizio non funziona, è un po' lungo, se posso posto il link all'articolo che suggerisce anche come scrivere la query

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.