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

    SQL: conta commenti, distinct

    Ho una tavola cosi

    userid
    topicid
    text

    La tavola ospita commenti ad un piccolo forum, per cui se un utente (userid diciamo 25) inizia un argomento, gli utenti che lo commentano creano record sul topicid (diciamo 20) cosi

    25 20 'ciao'
    25 20 'non mi piace'
    25 20 'mi piace'

    La tavola non ha chiavi unique. Per uno stesso userid ci pssono essere più topicid. Inoltre, il topicid di un user può essere uguale a quello di un altro user perchè è la coppia userid-topicid che identifica univocamente.

    Esempi

    25 20 'ciao'
    25 20 'non mi piace'
    25 32 'interessante'
    25 32 'mi piace'
    7 10 'lo compro'
    7 32 'preferirei verde' <-- nota topicid è uguale a un topicid per userid 25
    7 32 'preferisco blu'
    7 39 'bho'
    ecc...

    Domanda: non riesco a capire che sintassi (my)sql usare per avere per ogni userid e topicid il conteggio dei testi presenti senza riportare duplicati.

    esempio

    userid 25 topicid 20 count=3
    userid 25 topicid 32 count=1
    userid 7 topic 32 count=2

    Sarà un problema banale, ma tra distinct group by count mi ritrovo comunque con dei duplicati (se non che con conteggi sbagliati, perchè group by all fine mi seleziona sempre i campi esemplari da conservare decidendo lui quali escludere)

    grazie

  2. #2
    Prova con questa query:

    SELECT COUNT(*) FROM comments WHERE userid=20 AND topicid=25;

    Ovviamente il nome della tabella, lo userid e il topicid sono frutto della mia fantasia
    http://www.beavermag.it

  3. #3
    Grazie

    il problema è che il conteggio non dovrebbe avvenire con un loop che mi passa l'id alla query e il topic id - ti immagini lo stack overflow per tavole lunghe.

    Dovrebbe restiturimi il conteggio (assieme ai parametri userid e topic id per ogni conteggio ritornato) non solo senza doppi, ma anche a prescindere dallo specifico userid e topicid.

    In altre parole la query chiede: per ogni userid e ogni topicid dammi il numero di commenti presenti mostrandomi userid e topicid senza doppioni per il campo topicid nell' ambito dello specifico userid.

    Un problemino, lo so. Ma è anche di una certa utilità, mi piacerebbe risolverlo

    grazie

  4. #4
    nessuna idea tra i frequentatori serali per questa query?

  5. #5
    Se ho capito bene potresti provare cosi:

    SELECT COUNT( * ) , userid, topicid, CONCAT_WS( '_', userid, topicid ) AS coppia
    FROM comments
    GROUP BY coppia

    L'unico neo è che ti estrae anche il campo coppia, unione di userid e topicid, ma a questo punto potresti evitare di ustrarre userid e topicid.
    Il meccanismo comunque è creare un campo "fantasma" unione di userid e topic id e poi raggruppare in base a questa coppia che è univoca.
    Fammi sapere se ho capito bene cosa ti serviva.
    http://www.beavermag.it

  6. #6
    Trovato!

    group by userid, topicid

    richiedendo il raggruppamento su due colonne, estrae solo le COMBINAZIONI uniche di quelle due colonne

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.