Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Aiuto per una semplice query

    Ciao a tutti,
    vorrei un aiuto su una query da implementare per ottenere un certo risultato.

    La query che mi interessa dovrebbe estrarre il titolo e la data di creazione delle ultime 10 pagine create in un mediawiki.

    Le tabelle in gioco sono 2, my_page e my_revision, dove la prima contiene i dati di ciascuna pagina e la seconda i dati di tutte le modifiche apportate alle pagine.

    Questa query:

    codice:
    SELECT page_title, rev_timestamp
    FROM mw_page P, mw_revision R 
    WHERE P.page_id = R.rev_page
    ORDER BY page_id DESC
    LIMIT 10
    mi restituisce le ultime 10 pagine modificate:

    codice:
    page_title 	rev_timestamp
    
    Lombardia 	20120310100708  <==
    Sardegna 	20120310100119
    Sardegna 	20120310100946  <==
    Calabria  	20120305182009
    Calabria  	20120305181005
    Calabria  	20120305181614
    Calabria  	20120305182337
    Calabria  	20120306093618
    Calabria  	20120306093938
    Calabria  	20120309135546  <==
    mentre a me servirebbero le pagine distinte col valore minore di rev_timestamp (che equivale alla data di creazione), qualcosa come questo:
    codice:
    page_title 	rev_timestamp
    
    Lombardia 	20120310100708
    Sardegna 	20120310100946
    Calabria  	20120309135546
    .....
    Qual'è la query corretta da implentare?

    Grazie per le vostre risposte!

    Ciccio.

  2. #2
    Basta cambiare l'ordinamento nella query e fare un group by, mi sembra talmente ovvio che quasi non credo a quello che leggo


  3. #3
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955
    Originariamente inviato da Dascos
    Basta cambiare l'ordinamento nella query e fare un group by, mi sembra talmente ovvio che quasi non credo a quello che leggo

    La query corretta:
    codice:
    SELECT page_title, rev_timestamp
    FROM mw_page P, mw_revision R 
    WHERE P.page_id = R.rev_page
    AND not exists
    	(SELECT 'x'
    	FROM mw_revision R2
    	where R2.rev_page = R.rev_page
    	and R2.rev_timestamp < R.rev_timestamp)
    Tradotto, la query estrae tutte le pagine con data per cui non esiste altra data antecedente alla stessa (quindi prende la prima data).

    Non usare la group by perché funzionerebbe solo su MySql e non sugli altri DBMS.

    Ricorda che nell'elenco dei campi (quelli che metti dopo la clausola SELECT) se adoperi una GROUP BY puoi mettere solamente i campi presenti in quest'ultima a meno che non siano inclusi in funzioni di aggregazione. Non so se per un bug di MySql o per una scelta di sviluppo, questa regola, solo su questo DBMS non vale.

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.