Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    Contare i commenti di un post

    Ciao a tutti,
    il mio problema è il seguente: ho 2 tabelle, una dei post e l'altra dei commenti.

    Ora, in una normale SELECT per fare il listing dei post vorrei riuscire a contare anche quanti commenti ci sono in ognuno.

    Quindi, in una query basica come questa:
    SELECT * FROM post ORDER BY idpost DESC

    come posso fare un count nella tabella commenti, che come dato comunicante, hanno l'id del post????
    Perchè uso Maxthon? | Mi piace questa chat

  2. #2
    attraverso un JOIN delle tue tabelle
    Glue Labs
    Makes extraordinary things
    www.glue-labs.com/

  3. #3
    Originariamente inviato da glue-labs
    attraverso un JOIN delle tue tabelle
    Si ok, ma posso fare un COUNT in una JOIN ????

    Chiaramente la tabella commenti è fatta cosi:
    IDCOMM | IDPOST | COMMENTO
    20 | 10 | Ciao a tutti
    27 | 10 | Ciao anche da me
    42 | 10 | Bello questo sito

    Dovrei quindi contare, per il post 10, 3 commenti.
    Perchè uso Maxthon? | Mi piace questa chat

  4. #4
    Utente di HTML.it L'avatar di blekm
    Registrato dal
    Jun 2004
    Messaggi
    8,310
    Originariamente inviato da Bukowski
    Si ok, ma posso fare un COUNT in una JOIN ????
    perchè non potresti? Puoi, prova e vedrai che ottieni il risultato sperato.
    Il portale sul turismo a Lucca

    Siti web Lucca

    Vendo Tex a colori di Repubblica (primi 100 numeri) - info in pvt.

  5. #5
    Ci ho provato, ma qualcosa non mi torna.

    Il fatto è che in questo caso, se non trova corrispondenze nei commenti, ovviamente non mi da risultati, invece che darmi commenti = 0.

    Tale fabiob ha scritto 10 racconti, ma non ho risultati nella query poichè non ci sono commenti a suo favore.

    codice:
    SELECT *, DATE_FORMAT(racconti.data,'%d.%m.%Y') AS data, COUNT(idcomm) AS commenti FROM `racconti`
    JOIN racconti_commenti ON racconti.idracc = racconti_commenti.idracc
    WHERE autore = 'fabiob' GROUP BY racconti_commenti.idracc ORDER BY racconti.idracc ASC
    Mentre il risultato dovrebbe essere:

    TITOLO | DATA | NUMCOMMENTI
    Il mio primo amore | 12.05.2011 | 0
    La storia di Marco | 17.05.2011 | 2

    Ho provato anche con LEFT e RIGHT JOIN ma siamo sempre lì.

    Magari una subquery????
    Perchè uso Maxthon? | Mi piace questa chat

  6. #6
    Qualche idea???

    Le sto provando tutte ma non ci riesco
    Perchè uso Maxthon? | Mi piace questa chat

  7. #7
    prova così:
    codice:
    SELECT 
    	racconti.*, 
    	DATE_FORMAT(racconti.data,'%d.%m.%Y') AS data, 
    	COUNT(racconti_commenti.idcomm) AS commenti 
    FROM racconti
    LEFT OUTER JOIN racconti_commenti ON racconti.idracc = racconti_commenti.idracc
    WHERE autore = 'fabiob' 
    GROUP BY racconti_commenti.idracc 
    ORDER BY racconti.idracc ASC
    PS: evita di selezionare tutto con *, io preferisco sempre indicare ciò che si estrae con la query.
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  8. #8
    Mi sembra di averla fatta identica:

    Codice PHP:
    SELECT * , DATE_FORMATracconti.data,  '%d.%m.%Y' ) AS 
    DATA COUNTidcomm ) AS commenti
    FROM  
    `racconti
    LEFT OUTER JOIN racconti_commenti ON racconti.idracc racconti_commenti.idracc
    WHERE autore 
    =  '$nick'
    GROUP BY racconti_commenti.idracc 
    ORDER BY racconti
    .idracc ASC 
    LIMIT 0 
    30 
    Ma mi da solo 2 risultati su 24 che dovrebbe

    (* ti ringrazio, quando faccio i test asterisco tutto ma poi anche io seleziono solo ciò che mi servirà.)
    Perchè uso Maxthon? | Mi piace questa chat

  9. #9
    Fermo, ora funziona!!!!

    Ho spostato il GROUP BY su idracc (come da te suggerito) della tabella primaria, prima invece l'avevo sulla secondaria.

    Tutto qui, ora va.

    Ti ringrazio
    Perchè uso Maxthon? | Mi piace questa chat

  10. #10

    Efficienza

    Io se proprio dovessi farlo in un unica query farei cosi:


    Select r.id_racconto,r.data,r.attributivari from racconti r join (
    Select id_racconto as id_racconto2,count(*) as conto from commenti group by id_racconto
    )
    on id_racconto2 = r.id_racconto



    Tuttavia una query del genere è abbastanza inefficiente se gli indici non sono adeguatamente studiati, quindi occhio a come li hai fatti e rivedili per essere sicuro che le 2 query utilizzino gli indici.
    Inoltre se è una query che devi fare su un sito in produzione valuta la possibilitare una view che ti faccia la query indentata in modo da poter fare il join dei racconti con la view o addirittura valuta la possibilità di creare una view basata su entrambe le query con i dati che a te servono.

    enjoy
    Glue Labs
    Makes extraordinary things
    www.glue-labs.com/

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