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

    Aggiungere una somma in una join

    Ciao

    Devo fare una query intricata che vado a spiegare.

    articoli
    article_id
    article_title

    visite
    article_id
    article_hits

    Ho due tabelle (articoli, visite). "articoli" contiene l''id dell'articolo e il suo titolo mentre "visite" contiene, oltre all'id dell'articolo, le visite che questi hanno ricevuto. In un contesto normale me la caverei con un inner join...

    SELECT DISTINCT A.article_id, A.article_title FROM articoli AS A INNER JOIN visite AS R ON A.article_id = R.article_id ORDER BY R.article_hits DESC LIMIT 0,5

    Cosi facendo mi ricavo il titolo e l'id dei 5 articoli più visiti. Il problema è che il totale delle visite (article_hits) non è salvato in un solo record ma è il risultato di una somma. Mi spiego meglio. Il sistema salva le visite che l'articolo ha ricevuto giornalmente quindi il totale si ricava con...

    SUM(article_hits) WHERE article_id='un_articolo_qualsiasi'

    Come procedo? Me la cavo con una query o ne devo fare due?

  2. #2
    non capisco a cosa ti serva la distinct

    e non basta mettere la sum() nella query?

  3. #3
    Ho incollato la query come la tengo nello script. Mi sono dimenticato di spiegare il distinct. Lo uso perchè ci sono record duplicati e me ne basta uno. Bhè io ci ho provato ad aggiungere il SUM cosi:

    SELECT DISTINCT A.article_id, A.article_title FROM articoli AS A INNER JOIN visite AS R ON A.article_id = R.article_id ORDER BY SUM(R.article_hits) DESC LIMIT 0,5

    Ma il risultato è che mi mostra solo il primo risultato cioè l'articolo con più visite mentre a me, come è chiaro nel LIMIT, servono i primi 5.

  4. #4
    la sum va nella select, con la sua brava group by

  5. #5
    Si ma io la select la sto facendo sull'altra tabella.

    Andiamo passo passo.

    1. SELECT DISTINCT A.article_id, A.article_title FROM articoli AS A
    Mi seleziono l'id dell'articolo ed il titolo

    2. INNER JOIN visite
    Creo la join con l'altra tabella

    3. (SELECT SUM(R.article_hits) GROUP BY R.article_id) AS R ON A.article_id = R.article_id
    Aggiungo la somma delle visite raggruppate per id. Praticamente ho la somma delle visite di ogni articolo

    4. ORDER BY R.article_hits DESC LIMIT 0,5";
    Li ordino per visite e ne limito l'output ad i primi 5 record (i 5 più visiti)

    Il "totale" sarebbe questo

    SELECT DISTINCT A.article_id, A.article_title FROM articoli AS A INNER JOIN visite (SELECT SUM(R.article_hits) GROUP BY R.article_id) AS R ON A.article_id = R.article_id ORDER BY R.article_hits DESC LIMIT 0,5

    Ed il risultato è 0 record.

  6. #6
    no compriendo la tortuosità del ragionamento

    codice:
    SELECT 
       R.article_id, 
       A.article_title,
       SUM(R.article_hits)
    FROM 
       articoli AS A INNER JOIN visite AS R ON A.article_id = R.article_id
    GROUP BY 
       R.article_id,
       A.article_title
    ORDER BY 
       SUM(R.article_hits) DESC
    LIMIT 
       0,5
    facce sape'

  7. #7
    chiarissimo. Funziona ed ho capito l'errore. Grazie

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.