Query SQL per ricavare percentuale di messaggi letti

di il
17 risposte

17 Risposte - Pagina 2

  • Re: Query SQL per ricavare percentuale di messaggi letti

    SELECT
          ((SELECT COUNT(chat_read)
           FROM chat_members
           WHERE sender <> 1 AND chat_id = :chId1)  /
          (SELECT COUNT(chat_read)
           FROM chat_members
           WHERE sender <> 1 AND chat_read = 1 AND chat_id = :chId2) 
           * 100) as percentuale
    FROM chat_members
    Order by percentuale

    Ti restituisce un solo valore che indica la percentuale

  • Re: Query SQL per ricavare percentuale di messaggi letti

    17/10/2023 - BennyBatt ha scritto:


    L'idea è quella di calcolare la percentuale di lettura per ogni tupla di chat2 direttamente nella query in oggetto, inserendo delle subqueries. Ho fatto dei tentativi, ieri. Questa query, a se stante, ovviamente restituisce il risultato voluto:

    SELECT COUNT(cm.chat_read)
    
    FROM chat_members AS cm
    
    INNER JOIN chat2 ON chat2.chatId = cm.chat_id
    
    WHERE cm.chat_read = 1 AND chat2.chatId = 25

    Ma, non riesco ad inserirla come subquery generale per tutte le tuple nella mia query base per tutti gli id di chat2 elaborati. Forse non è possibile o, più probabilmente, è possibile ma io non capisco come fare. 

    Quello che tu proponi, se non ho capito male è una nuova query esterna alla mia.  Certo è una strada percorribile. A meno che tu non intenda la struttura come base per la subquery in discussione?

    Scusa se ti sembrerà irritante la risposta, ma sono ancora ai rudimenti di SQL…

    usa i parametri. cambiando i parametri, la stessa query restituisce i dati che ti servono, anche zero.

    28/10/2023 - BennyBatt ha scritto:


    Ciclando tra le tuple, applico una query che recupera i dati dalla tabella chat_members, quindi posso calcolare la percentuale.

    usa un ciclo per passare i parametri.

    selezioni gli utenti che vuoi controllare (magari su un array dinamico).

    per a da 1 a n

      il parametro = a e riesegui la query e assegni all'utente la percentuale di risposta.

    Anche io più leggo e più mi rendo conto di essere ai rudimenti di sql… ma bisogna sbatterci la testa.

  • Re: Query SQL per ricavare percentuale di messaggi letti

    Grazie per la pazienza SiHsAndrea.

    In effetti, la tua routine (che riporto sotto) semplifica un poco la mia soluzione, evita di eseguire un calcolo in PHP dopo la fetch dei risultati. La userò.

    SELECT
          ((SELECT COUNT(chat_read)
           FROM chat_members
           WHERE sender <> 1 AND chat_id = :chId1)  /
          (SELECT COUNT(chat_read)
           FROM chat_members
           WHERE sender <> 1 AND chat_read = 1 AND chat_id = :chId2) 
           * 100) as percentuale
    FROM chat_members
    Order by percentuale

    Per il resto già uso un ciclo sulle tuple, e ho deciso che la soluzione va bene: non richiede troppe risorse, e mi restituisce i dati correttamente. Riguardo alla query unica, studierò le alternative con i cicli che presupponi, anche se penso che una via più percorribile sia l'uso di una CTE, che dovrebbe aiutare a svolgere il lavoro dei cicli.

    La mia versione installata di SQL, siccome il mio computer è ancora 32 bit, non le supporta, ma presto farò un update dell'hardware, e allora proverò.

    Grazie ancora.

Devi accedere o registrarti per scrivere nel forum
17 risposte