Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di luke83
    Registrato dal
    Jul 2000
    Messaggi
    1,217

    query con group by e ordinamento.. solo 1 risultato per elemento di gruppo

    capisco benissimo ke il sabato pomeriggio per molti sia motivo di riposo e poco stress e leggere certi titoli nn fa bene alla salute ma io davvero nn mi raccapezzo in questa query e sinceramente quando sei stanco qui si trova sempre gente ke ti sceta un pò

    espongo..

    considerata la tabella
    codice:
    id | fid | data
     1 |  1  |  10
     2 |  1  |  9
     3 |  2  |  11 
     4 |  2  |  12
     5 |  3  |  5
     6 |  3  |  6
     7 |  3  |  8
     8 |  3  |  7
    il risultato atteso (sperato con tutto me stesso e santini vari):

    codice:
    id | fid | data
     1 |  1  |  10
     4 |  2  |  12
     7 |  3  |  8
    in pratica per ogni elemento per "fid" recuperarne solo uno per "fid" ke abbia la data maggiore (simbolicamente rappresentata da un numero )

    svolgimento 1
    Codice PHP:
    SELECT fid,data,id JOIN......GROUP BY fid ORDER BY data ASC 
    svolgimento 2
    Codice PHP:
    SELECT fid,data,id JOIN......GROUP BY fid ORDER BY data DESC 
    entrambi con esiti nn voluti.. in pratica il raggruppamento ha luogo ma l'ordinamento è come se fosse casuale o comunque gestite da dinamiche interne del mysql nn determinabili a priori e che lasciano sospettare l'intervento di qualche entità superiore ke intenda sabotare il normale svolgimento di piccole amenità terrestri...

    a chi ha un pò di buon cuore...

    buon sabato e domenica a tutti...

    ..::Luca::..
    » "se nn riesci a venirene a capo.. usa il tasto INVIO" © 2005 Luke83
    » "letta la documentazione, spazio all'immaginazione.." © 2006 Luke83
    [frasi random] - [Lucopedia] - [laFetta]

  2. #2
    se i valori sono solo quelli devi fare la scelta di MAX(data) e l'order by fid asc
    codice:
    SELECT id, fid, MAX(data) as data 
    FROM
    JOIN......
    WHERE
    GROUP BY fid 
    ORDER BY fid

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

  3. #3
    Utente di HTML.it L'avatar di luke83
    Registrato dal
    Jul 2000
    Messaggi
    1,217
    grazie piero...

    al solito hai sempre la soluzione giusta.. funge a dovere.. del MAX nn ci sarei mai arrivato

    ma per questo esisti tu

    buona domenica a tutti
    ..::Luca::..
    » "se nn riesci a venirene a capo.. usa il tasto INVIO" © 2005 Luke83
    » "letta la documentazione, spazio all'immaginazione.." © 2006 Luke83
    [frasi random] - [Lucopedia] - [laFetta]

  4. #4
    Utente di HTML.it L'avatar di luke83
    Registrato dal
    Jul 2000
    Messaggi
    1,217

    doh..

    piero ho ricontrollato..
    ma nn funge avevo cantato vittoria troppo presto, anche così i risultati esatti sono solo gioco di fortuna.. popolando la tabella ci si allontana dal risultato voluto

    anke selezionata la funzione di aggregazione max da te indicata i risultati mostrano chiaramente date "nn massime".. in quanto nella tabella per lo stesso fid compaiono date maggiori della data selezionata nel record mostrato dalla query per quel fid..

    molto strano..

    qualcuno mi illumina..

    ..::Luca::..
    » "se nn riesci a venirene a capo.. usa il tasto INVIO" © 2005 Luke83
    » "letta la documentazione, spazio all'immaginazione.." © 2006 Luke83
    [frasi random] - [Lucopedia] - [laFetta]

  5. #5
    guarda che ti avevo messo "SE".... hai solo quei campi "deve" funzionare.

    se tu hai altri valori legati al max(data) non ti verranno presi se non casualmete. E' una storia vecchia. GROUP BY e' un aggregatore. Questo significa che serve a raggruppare e quindi MAX,MIN, COUNT, SUM e quant'altro. degli altri dati se ne fotte. prende il primo record che soddisfa la condizione e ti mette quello, il primo che trova scorrendo la tabella.

    Con le versioni che supportano le query annidate si puo' fare il raggruppamento con un join sulla stessa tabella. Oppure al vecchio modo costruire una tabella temporanea ordinata secondo quello che ti serve e poi agire su questa.

    ti faccio un esempio con le query annidate:
    codice:
    SELECT * 
    FROM 
    (select max(data) as data1 from tabella
    group by fid) as tab1
    left join tabella as tab2 ON tab1.data1 = tab2.data

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

  6. #6
    Utente di HTML.it L'avatar di luke83
    Registrato dal
    Jul 2000
    Messaggi
    1,217

    san piero mietc a mana toia

    piero inizioa pensare ke la mia versione del mysql abbia problemi mentali.. oppure io

    ho fatto la query semplice.. mo voglio capire se sono io ke ho capito male:

    tra sti due record:

    id | fid | subject | dateline
    6 | 6 | titolo1 |1149633734
    7 | 6 | titolo2 |1149633748

    dovrebbe estrarre il secondo (quello con titolo2 ed id 7)? ke ha la data maggiore? esattamente massima a parità di fid?

    xkè invece quel mulo di mysql mi stampa il primo record?

    anzi se proprio devo dirla tutta stampa sempre id,subject e fid del primo record e la data a seconda se metti min o max ti stampa rispettivamente la prima o la seconda data.. quindi prende la data del secondo record e la mette nel primo, secondo lui.. così mi fa fesso e contento..

    naturalmente aggiungendo join e compagnia la cosa nn cambia.. ma è chiaro, nn venendo con quella semplice figuriamoci "complicando" la query

    se hai ancora un pò di pazienza e mi consigli delle buone goccie da prendere per dormire..
    ..::Luca::..
    » "se nn riesci a venirene a capo.. usa il tasto INVIO" © 2005 Luke83
    » "letta la documentazione, spazio all'immaginazione.." © 2006 Luke83
    [frasi random] - [Lucopedia] - [laFetta]

  7. #7
    e che ho scritto a fare prima?

    rileggi il post...

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

  8. #8
    Utente di HTML.it L'avatar di luke83
    Registrato dal
    Jul 2000
    Messaggi
    1,217
    riletto..

    nn avevo ben inteso..

    chiedo venia..

    l'età avanza..

    eh eh..

    ..::Luca::..
    » "se nn riesci a venirene a capo.. usa il tasto INVIO" © 2005 Luke83
    » "letta la documentazione, spazio all'immaginazione.." © 2006 Luke83
    [frasi random] - [Lucopedia] - [laFetta]

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.