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

    Elencare i valori di un db con id non univoco

    Mettiamo che io abbia una tabella col campo ID non univoco e voti e debba elencare tutte le voci, ma quelle con id uguale una sola volta

    tradotto in esempio

    ID VOTO
    1 6
    2 7
    3 7
    1 3
    1 1

    vorrei creare una query che generi l'elenco di tutte le id (cui poi associerò un nome) e la media dei voti e il numero dei voti, quindi

    ID MEDIA N_VOTI
    1 3,33 3
    2 7 1
    3 7 1

    Ordinate per ID o per MEDIA o per N_VOTI a seconda della scelta dell'utente che vede la pagina

    Non ho proprio idea di come si faccia, se serva un doppio ciclo while o se si memorizza su array o se esiste una istruzione apposita.

    Potenzialmente potrebbero esseri migliaia di voti, quindi una soluzione che regga anche in questo caso

    Grazie

  2. #2
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,514
    codice:
    SELECT campo1 , SUM(campo2)
    FROM tab 
    group by campo1;

    campo 1 è il campo che usi come riferimento per il raggruppamento
    nel tuo caso id

    campo 2 il campo che vuoi sommare o effettuare una qualsiasi operazione

    invece di sum puoi usare

    COUNT
    AVG
    MIN
    MAX

    i quali credo non abbiano bisogno di spiegazione
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  3. #3
    Grazie! Ho fatto così:
    Codice PHP:
    $sql="SELECT topic_id, 
        SUM(poll_option_id) AS somma, 
        AVG(poll_option_id) AS media,
        COUNT(poll_option_id) AS conta
        FROM phpbb_poll_votes GROUP BY topic_id ORDER BY topic_id ASC "
    ;

    $risultati=mysql_query($sql);
    while(
    $riga=mysql_fetch_assoc($risultati)) {

    echo 
    "$riga["topic_id"] $riga["somma"] $riga["media"] $riga["conta"]"
    e funziona. Ora il mio problema è:

    Ho un'altra tabella, topic_id, in cui sono associati gli id al nome del topic. Dovrei stampare la stessa tabella di prima ma con al posto degli ID i nomi dei topic. Ho fatto questa query

    Codice PHP:
    $sql="SELECT t.topic_id AS id,
        t.topic_title AS titolo,
        SUM(p.poll_option_id) AS somma,
        p.topic_id
        FROM phpbb_topics t, phpbb_poll_votes p GROUP BY p.topic_id
        WHERE t.forum_id=2 AND
        t.topic_id = p.topic_id
        ORDER BY t.topic_id ASC LIMIT 100"

    ma mi dà syntax error. Senza SUM() e GROUP BY funziona, ma oviamente se allo stesso ID corrispondono 2 o più voti me li stampa due volte invece di stampare una sola riga con la somma

    Si può fare o bisogna per forza usare qualcosa tipo JOIN o simili (sto guardando la documentazione su mysql.com ma ho un po' di difficoltà)

    grazie ancora

  4. #4
    Dopo aver letto molta documentazione, e riscritto tutto usando la sintassi JOIN ... ON sono riuscito a farlo funzionare, poi ho dato un'occhiata fugace al vecchio codice e ho visto che ho messo GROUP BY prima di WHERE, e per questo non andava

    Perso un sacco di tempo per una distrazione...

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.