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

    [MYSQL] problema con una query

    (innanzitutto, saluti ed auguri di buon anno ad amici e parenti )
    la query è molto più complessa ma la parte che mi dà problemi potrebbe essere così semplificata
    ho tre tabelle
    tabella A con aid autoincrement
    codice:
    +-----+------+
    | aid | infoA|
    +-----+------+
    tabella B bid autoincrement, aid come collegamento a tabella A
    codice:
    +-----+-----+------+
    | bid | aid | infoB|
    +-----+-----+------+

    tabella C cid autoincrement e bid come collegamento alla tabella B
    codice:
    +-----+-----+------+
    | cid | bid | infoC|
    +-----+-----+------+
    non riesco a contare i bid ed i cid di aid con una unica query
    la query
    codice:
    SELECT tabA.aid, tabA.info, COUNT(tabB.bid), COUNT(tabC.cid)
    FROM tabA
    LEFT JOIN tabB ON (tabB.aid=tabA.aid)
    LEFT JOIN tabC ON (tabC.bid=tabB.bid)
    naturalmente mi conta più volte i tabB.bid per quanti più tabC.cid sono collegati

    chi mi sa dare qualche dritta?
    E' la mia opinione ed io la condivido
    Non condivido la tua idea ma darei la vita perché tu la possa esprimere (Voltaire)
    Scrivi sul muro

  2. #2
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    prova ad inserire il GROUP BY alla fine della query:
    codice:
    SELECT tabA.aid,tabA.infoA, COUNT(tabB.bid), COUNT(tabC.cid) FROM tabA
    LEFT JOIN tabB ON tabA.aid = tabB.aid
    LEFT JOIN tabC ON tabC.bid = tabB.bid
    GROUP BY tabA.aid



    prova anche a postare un esempio numerico del conteggio che vuoi effettuare
    think simple think ringo

  3. #3
    Originariamente inviato da marketto
    prova ad inserire il GROUP BY alla fine della query:
    codice:
    SELECT tabA.aid,tabA.infoA, COUNT(tabB.bid), COUNT(tabC.cid) FROM tabA
    LEFT JOIN tabB ON tabA.aid = tabB.aid
    LEFT JOIN tabC ON tabC.bid = tabB.bid
    GROUP BY tabA.aid



    prova anche a postare un esempio numerico del conteggio che vuoi effettuare
    il group by ci vuole, ma non puo' essere l'id di tabA. l'id e univoco di suo e quindi non ha possibilita' di raggruppamento se non 1. Inoltre non ci sono relazioni tra tabA e tabC se non a cascata tramite tabB. Abbastanza discutibile come struttura di database.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    si ok, il GROUP BY l'avevo omesso ma non è quello il problema

    la struttura che volevo seguire era questa

    -> informazioni generali sulla pagina (tabA)
    ->-> messaggi nella pagina (tabB)
    ->->->commenti ai messaggi (tabC)

    considerando che se devo visualizzare un commento (tabC), devo necessariamente prendere info sia da tabA che da tabB

    se facessi anche una relazione diretta tabA tabC non vedo come risolverebbe il problema se non con due query (cosa che potrei fare anche in questo caso)

    allora in che modo posso/devo cambiare la struttura?
    E' la mia opinione ed io la condivido
    Non condivido la tua idea ma darei la vita perché tu la possa esprimere (Voltaire)
    Scrivi sul muro

  5. #5
    Originariamente inviato da boomboom69
    si ok, il GROUP BY l'avevo omesso ma non è quello il problema

    la struttura che volevo seguire era questa

    -> informazioni generali sulla pagina (tabA)
    ->-> messaggi nella pagina (tabB)
    ->->->commenti ai messaggi (tabC)

    considerando che se devo visualizzare un commento (tabC), devo necessariamente prendere info sia da tabA che da tabB

    se facessi anche una relazione diretta tabA tabC non vedo come risolverebbe il problema se non con due query (cosa che potrei fare anche in questo caso)

    allora in che modo posso/devo cambiare la struttura?
    Quindi hai la tabA in rapporto uno a molti con tabB e la tabB in rapporto uno a molti con tabC.

    In questo caso non ti rimane che fare due queries. E non e' detto che questo sia piu' oneroso di una JOIN di quel tipo sopra.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    Originariamente inviato da piero.mac
    E non e' detto che questo sia piu' oneroso di una JOIN di quel tipo sopra.

    ... e meno male che non hai visto tutta la query

    thank's piero
    E' la mia opinione ed io la condivido
    Non condivido la tua idea ma darei la vita perché tu la possa esprimere (Voltaire)
    Scrivi sul muro

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.