Visualizzazione risultati 1 fino 5 di 5

Discussione: Query che non seleziona tutti i campi

  1. #1
    Guest

    Predefinito Query che non seleziona tutti i campi

    Ciao a tutti, ho fatto questa query, piuttosto complessa, dove voglio selezionare, per ogni categoria, alcuni dati che si trovano in altre tabelle.

    SELECT d.name AS category, c.name, c.surname, COUNT(a.id) AS totPost, COUNT(b.id) AS totReply
    FROM forum_category AS d
    INNER JOIN forum_post AS a
    ON a.category = d.id
    INNER JOIN forum_reply AS b
    ON b.post = a.id
    INNER JOIN utenti AS c ON c.id = b.owner
    Le tabelle sono così diposte:

    forum_category
    id | name

    forum_post
    id | name | category

    forum_reply
    id | owner | testo | post

    utenti
    id | name | surname


    Quello che vorrei ottenere con questa query è una cosa del genere:

    Nome cattegoria | Totale threads in quella categoria | Torale risposte | Utente ultima risposta

    Sfortunatamente non sembra funzionare! Qualche suggerimento?
    Ultima modifica di enkantar : 20-01-2013 alle ore 16.51.05

  2. #2
    Guest

    Predefinito

    Spiegati meglio, in cosa non funziona?
    Considera che le Join (INNER) ti restituiscono solo le righe della prima tabella che hanno riferimenti nelle tabelle collegate. Le righe orfane non appariranno.

  3. #3
    Guest

    Predefinito

    Eh esatto, è quello il problema! Inoltre con i COUNT mi somma tutti i post/threads.
    Avendo queste tabelle, vorrei ottenere questi campi:

    Nome cattegoria | Totale threads in quella categoria | Torale risposte | Utente ultima risposta


    forum_category
    id | name

    forum_post
    id | name | category

    forum_reply
    id | owner | testo | post

    utenti
    id | name | surname

    Sai aiutarmi?

  4. #4
    Guest

    Predefinito

    UP: Ho aggiornato la query e ora presenta soltanto un piccolo bug: il risultato totPost è sempre uguale al totReply, anche quando in effetti non lo è! Qualcuno sa aiutarmi?

    SELECT d.name AS category, c.name, c.surname, COUNT(a.id) AS totPost, COUNT(b.id) AS totReply FROM forum_category AS d LEFT JOIN forum_post AS a ON a.category = d.id LEFT JOIN forum_reply AS b ON b.post = a.id LEFT JOIN utenti AS c ON c.id = b.owner GROUP BY category

  5. #5
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    COUNT conta il numero di righe in cui il campo non è NULL. Probabilmente vuoi contare il numero di elementi diversi, almeno per quanto riguarda totPost, quindi dovresti usare COUNT(DISTINCT a.id).

    Cmq il modo migliore per rendersi conto di cosa non funziona è provare a lanciare la query da phpMyAdmin togliendo gli operatori di aggregazione (COUNT, GROUP BY, ...) e vedere cosa tira fuori la SELECT.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •