Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [MYSQL] limitare a due record per tipo

    Ragazzi ho cercato in giro ma nada, non ho trovato ciò che mi serve:
    io avrei bisogno di avere una lista di record da un database strutturato circa così:
    ID ufficio collo data
    1---economato---carta-------06-06-2009
    2---economato---penne-------07-06-2009
    3---economato---matite------08-06-2009
    4---direzione-----carta-------06-06-2009
    5---direzione-----matite------07-06-2009
    6---direzione-----fermagli-----08-06-2009

    restituita in questo modo:

    ID ufficio collo data
    2---economato----penne------07-06-2009
    3---economato----matite------08-06-2009
    5---direzione------matite------07-06-2009
    6---direzione------fermagli-----08-06-2009

    In pratica vorrei visualizzare solo i 2 record più recenti per data di un dato ufficio, escludendo tutti gli altri.
    grazie in anticipo!
    Come potrei fare secondo voi?
    Avevo pensato alla clausola GROUP BY, ma mi visualizza solo un record per Ufficio.

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    codice:
    set @ufficio := '', @num := 1;
    select * from (
    select *,
       @num := if(@ufficio = ufficio, @num + 1, 1) as riga_numero,
       @ufficio := ufficio as uff
    from tabella
    order by ufficio asc, data desc) as tab where riga_numero <= 2;
    Ovviamente le date devono essere tali. Nel tuo esempio nel formato gg-mm-aaaa sono stringhe e l'ordinamento avverrà di conseguenza.

  3. #3
    Grazie per la pronta risposta...
    Non mi funziona, probabilmente sbaglio ad inserire il codice.
    Per visualizzare uso il PHP, magari dovevo dirlo subito, sorry!

    la query in php scritta così

    Codice PHP:
    $result mysql_query("
    set @ufficio := '', @num := 1;
    select * from (
    select *,
       @num := if(@ufficio= ufficio, @num + 1, 1) AS riga_numero,
       @ufficio := ufficio AS
    from tabella
    ORDER BY ufficio ASC, data DESC) AS tab WHERE riga_numero <= 2;
    "
    $db);

    while (
    $row mysql_fetch_array($result)) 
        { 
    $id $row["id"];
    $ufficio$row["ufficio"];
    $data $row["data"]; 
    mi da il seguente errore
    "Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\..\..\..\..\ufficio.php on line 44"

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Le query sono due.

    Codice PHP:
    $query1 mysql_query("set @ufficio := '', @num := 1");
    $query2 mysql_query("select * from .... ");
    while (
    $row mysql_fetch_assoc($query2)) { 

  5. #5
    occhio che:
    Codice PHP:
       @ufficio := ufficio AS
    from tabella 
    per mysql significa: @ufficio := ufficio AS from

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    stesso errore...
    ho provato a scrivere così:
    Codice PHP:
    $query1 mysql_query("set @ufficio := '', @num := 1"); 
    $query2 mysql_query("SELECT * FROM ( 
    SELECT *, @num := if(@ufficio = ufficio, @num + 1, 1) AS riga_numero, 
    @ufficio := ufficio AS ufficio1 
    FROM tabella 
    ORDER BY data DESC) AS tab WHERE riga_numero <= 2 "
    $db );

    while (
    $row mysql_fetch_assoc($query2)) { 
    ma nisba

    :master:

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Hai messo al posto di tabella il vero nome della tua?

  8. #8
    @nicola... a prescindere che sarebbe meglio ci fosse la stampa dell'errore di query...

    sta cosa mi ha incuriosito.... spiegami un po' queste due righe:

    @num := if(@ufficio = ufficio, @num + 1, 1) AS riga_numero,
    @ufficio := ufficio AS ufficio1

    mi pare possa esistere un errore formale.

    Se l'ordine dei record trova valori del campo ufficio non ordinati potrebbe essere che ogni volta il contenuto di ufficio possa essere diverso dal precedente e @num farebbe una bella fila di 1 invece di incrementare il contatore.

    potrebbe essere piu' efficiente l'uso di uno switch CASE.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Ciao Piero.
    Nella query ho prima ordinato per ufficio e quindi mi sembra che il problema non si ponga. Comunque se hai soluzioni alternative ben vengano. Lo sai che pendo sempre dalla tua tastiera.

  10. #10
    Originariamente inviato da nicola75ss
    Ciao Piero.
    Nella query ho prima ordinato per ufficio e quindi mi sembra che il problema non si ponga. Comunque se hai soluzioni alternative ben vengano. Lo sai che pendo sempre dalla tua tastiera.
    hai ragione. Ho guardato la query interpretata dallo Zio dove non ordina per ufficio....


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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.