Pagina 3 di 4 primaprima 1 2 3 4 ultimoultimo
Visualizzazione dei risultati da 21 a 30 su 39
  1. #21
    Ok, mi sono informato meglio. In effetti ho commesso degli errori. Chiedo scusa a tutti, ma ero un pò arrugginito.

    Allora ho trovato:

    ---------------------------------
    L'operatore GROUP BY serve a raggruppare i risultati di una SELECT in base al campo specificato dopo il BY. L'operatore va usato in congiunzione con una funzione statistica (COUNT, SUM ...) secondo la seguente sintassi:

    SELECT <campo>, <funzione stat.>
    FROM <tabelle>
    [WHERE <condizione>]
    GROUP BY <campo>

    dove <campo> deve essere lo stesso nella SELECT e nel GROUP BY.

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

    Quindi nel caso di Tarini


    SELECT t.*, UNIX_TIMESTAMP(MAX(p.d)) AS last_post, UNIX_TIMESTAMP(tr.d) AS last_read, UNIX_TIMESTAMP(t.d) AS timestamp, COUNT(p.id) AS count, u.username AS username
    FROM topic AS t
    LEFT JOIN post AS p ON t.id = p.id_topic
    INNER JOIN user AS u ON u.id = t.id_user
    LEFT JOIN (SELECT * FROM topic_read WHERE id_user=1) AS tr ON t.id = tr.id_topic
    WHERE t.id_section = 6
    GROUP BY p.id
    ORDER BY t.sticky DESC, MAX(p.d) DESC


    nella SELECT ....... il primo campo deve essere quello oggetto del GROUP BY
    quindi dovresti avere
    SELECT p.id e non SELECT t.*



    Invece, per le funzioni di aggregazione:

    ----------------
    Il principio di fondo delle funzioni di aggregazione e della clausola GROUP BY è infatti questo: tutti i campi devono rappresentare un raggruppamento, dettato da un'aggregazione oppure da una clausola GROUP BY.
    ----------------

    Ciao.

  2. #22
    Come mi ha suggerito Piero.mac è probabile ke la versione 4 di MySQL non supporti le query annidate............
    Cmq è interessante confrontarsi sull'SQL.

    Ciao raga!

  3. #23
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    591
    per essere formalmente corretta tutti i campi che non sono oggetto di funzioni di aggregazione (max,min,sum,avg ..) devono apparire nei campi di group by , non importa con che ordine .
    se un campo oggetto di funzioni di aggregazione compare in group by non è corretto

  4. #24
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    591
    il mio mysql 4.1.1 le "sopporta"

  5. #25
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    591
    Cambia la query così allora.

    SELECT t.*, UNIX_TIMESTAMP(MAX(p.d)) AS last_post, UNIX_TIMESTAMP(tr.d) AS last_read, UNIX_TIMESTAMP(t.d) AS timestamp, COUNT(p.id) AS count, u.username AS username
    FROM topic AS t
    LEFT JOIN post AS p ON t.id = p.id_topic
    INNER JOIN user AS u ON u.id = t.id_user
    LEFT JOIN topic_read AS tr ON t.id = tr.id_topic
    WHERE t.id_section = 6
    AND (tr.id_user=1 or tr.id_user is null)
    GROUP BY p.id
    ORDER BY t.sticky DESC, MAX(p.d) DESC

  6. #26
    Originariamente inviato da stabi
    max si può usare sempre indipendentemente dagli indici, ovviamente ci deve essere una group by ma non deve essere nell'elenco dei campi di group by.
    le funzioni di aggregazione possono essere usate anche senza la clausola GROUP BY, in tal caso l'intero risultato è trattato come se fosse un unico grande gruppo.


    Poi, non so se tu lo sapevi (io no) ma nella versione SQL standard del '92 e del 2003 viene a cadere il concetto che "tutte le colonne non aggregate nella SELECT devono essere presente nella clausola GROUP BY" e viene richiesto che "qualsiasi colonna non aggregata che appare nella SELECT sia funzionalmente dipendente dalla clausola GROUP BY".

    :master:

    Quindi le colonne che appaiono nella SELECT devono essere funzionalmente dipendenti dai gruppi che sono definiti dalla clausola GROUP BY. Quindi, se mettiamo nella clausola GROUP BY tutte le colonne che sono chiave primaria o univoca automaticamente possiamo far riferimento a qualsiasi colonna nella SELECT, anche se non appare nelle espressioni di aggregazione.
    Ke goduria!

    Il problema adesso è ke non tutti seguono lo STANDARD, neanche MySQL purtroppo. Ho trovato, infatti, in tal senso un articolo molto interessante:

    http://dev.mysql.com/tech-resources/...-by-myths.html

    Sempre + interessante!

  7. #27
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    591
    che senso ha mettere in group by tutti i campi delle chiavi primarie?
    non raggruppa nulla!
    mettendo poi una max(campo) ti ritorna semplicemente il campo.
    per cui ......

    mah...

    se non si vuole raggruppare non si usa la group by (che poi impiega + tempo)!

    mi sa che andiamo OT:

  8. #28
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    591
    Originariamente inviato da gianf_tarantino
    le funzioni di aggregazione possono essere usate anche senza la clausola GROUP BY, in tal caso l'intero risultato è trattato come se fosse un unico grande gruppo.
    vero solo se nella select usi SOLO funzioni di aggregazione, come indichi un altro campo ...

  9. #29
    Originariamente inviato da stabi
    vero solo se nella select usi SOLO funzioni di aggregazione, come indichi un altro campo ...

    Si, è vero con SQL non si può scherzare che subito ti si......


    TARINI, come è andata a finire con la tua SELECT?

  10. #30
    ragazzi scusate ma sono stato fuori tutta la mattina e non sono potuto intervenire nella discussione (e me ne spiace...)

    usando la query proposta da stabi il risultato è esattamente quello precedente...

    fatemi riaccendere i neuroni e vi farò sapere...

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 © 2026 vBulletin Solutions, Inc. All rights reserved.