Visualizzazione dei risultati da 1 a 7 su 7

Discussione: join e Distinct

  1. #1

    join e Distinct

    Salve, una domandina non so se semplice o meno...
    allora ho un DB con le seguenti tabelle

    [post]: id_post - titolo_post - corpo_post - data_post
    [risposta]: id_risposta - risposta - data_risposta - id_post_risposta
    ora effettuo una join per estrarle in una sola pagina

    $query_risposte="SELECT DISTINCT titolo_post, corpo_post, data_post, risposta, data_risposta, id_post_risposta FROM post AS p, risposta AS r WHERE r.id_post_risposta=p.id_post";
    $result_risposte=mysql_query($query_risposte, $connessione) or die ecc...

    while($ris=mysql_fetch_array($result_risposte)){
    echo "<div>";
    echo "Titolo: ".$ris['titolo']."
    ";
    echo "corpo: ".$ris['corpo_post']."
    ";
    echo "data: ".$ris['data']."
    <hr/>";

    echo "<div>";
    echo "Titolo: ".$ris['risposta']."
    ";
    echo "corpo: ".$ris['data_risposta']."
    ";
    echo "</div>";
    echo "</div><hr/>";
    }

    in questo caso ottengo il post con id ad esempio 1
    e la risposta con id crescente
    es:
    [post]:id 1 - titolo - corpo - data
    [risposta]:id 1 - risposta - data_risposta - id_post_risposta 1

    [post]:id 1 - titolo - corpo - data
    [risposta]:id 2 - risposta - data_risposta - id_post_risposta 1

    [post]:id 1 - titolo - corpo - data
    [risposta]:id 3 - risposta - data_risposta - id_post_risposta 1
    ecc ecc.

    invece vorrei che si vedesse solo il risultato di post
    con sotto tutti i risultati di risposta in questo modo:

    [post]:id 1 - titolo - corpo - data
    [risposta]:id 1 - risposta - data_risposta - id_post_risposta 1

    [post]:id 1 - titolo - corpo - data
    [risposta]:id 2 - risposta - data_risposta - id_post_risposta 1

    [post]:id 2 - titolo - corpo - data
    [risposta]:id 3 - risposta - data_risposta - id_post_risposta 2

    [post]:id 2 - titolo - corpo - data
    [risposta]:id 4 - risposta - data_risposta - id_post_risposta 2

    [post]:id 2 - titolo - corpo - data
    [risposta]:id 5 - risposta - data_risposta - id_post_risposta 2

    è possibile?
    ps spero di essere stato chiaro?
    Regolo76

  2. #2
    opsssss ho commesso un errore...
    vorrei farlo visualizzare nel seguente modo

    [post]:id 1 - titolo - corpo - data
    [risposta]:id 1 - risposta - data_risposta - id_post_risposta 1
    [risposta]:id 2 - risposta - data_risposta - id_post_risposta 1


    [post]:id 2 - titolo - corpo - data
    [risposta]:id 3 - risposta - data_risposta - id_post_risposta 2
    [risposta]:id 6 - risposta - data_risposta - id_post_risposta 2
    [risposta]:id 10 - risposta - data_risposta - id_post_risposta 2
    Regolo76

  3. #3
    La questione e che vorrei evitare di effettuare 2 query separate.
    Come risultato ci siamo, cioè mi escono sia i dati della tabella post e sia i dati della tabella risposta solo che il campo nella tabella [B]post[B]viene ripetuto per ogni riga della tabella risposta cioè (come mostrato in precedenza):
    [post]:id 1 - titolo - corpo - data
    [risposta]:id 1 - risposta - data_risposta - id_post_risposta 1
    [post]:id 1 - titolo - corpo - data
    [risposta]:id 2 - risposta - data_risposta - id_post_risposta 1
    [post]:id 1 - titolo - corpo - data
    [risposta]:id 3 - risposta - data_risposta - id_post_risposta 1

    vorrei mostrare solo una volta la tabella [B]post[B] e tante tabelle risposta quanti sono i campi di riferimento.

    non c'è nessuno che mi possa aiutare?
    è sbagliato la query che ho formulato?

    ho provato anche nei seguenti modi.... ma il risultato è sempre lo stesso!

    Codice PHP:
    $query_dati="SELECT * FROM post AS p1 INNER JOIN (SELECT * FROM risposta) AS r ON p1.id=r.id_post_risposta; 
    Codice PHP:
    $query_dati="SELECT DISTINCT * FROM post AS p1 JOIN risposta AS r1 ON p1.id = r1.id_post_risposta"
    grazie
    Regolo76

  4. #4
    devi gestire l'output con il php.

    controlli [post] se uguale al precedente lo salti altrimenti lo stampi. Es. parlato:

    [post]= 'niente';

    where .... $row = mysql_fetch_array()

    if ($row['post'] == [post] ) non stampare [post]
    else stampa [post]

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

  5. #5
    io pensavo che si potesse risovere direttamente nella query, anche perchè la funzione DISTINCT non dovrebbe eliminare tutti i doppioni? e quindi eliminare le repliche di post?
    perchè leggendo di qua e di la sembrava che questo si potesse fare.... Boh!!! non ci sto capendo più nulla!
    al controllo non ci ho pensato perchè in realtà non mi serve come progetto ma come studio e quindi pensavo di estrarre i dati direttamente nel modo prestabilito...
    per ora effettuerò un controllo sui campi, ma se esiste un modo tramite query... anche ristrutturandola exnovo mi aiutereste??

    ancora grazie
    Regolo76

  6. #6
    distinct si estende a tutti i campi elencati nella SELECT:

    select distinct pallo, pippo, pallino vuol dire che se uno dei tre campi differisce dal precedente formera' un nuovo record nel result set.

    Quindi:
    ciccio, ciccio1, ciccio1
    ciccio, ciccio2, ciccio1
    ciccio, ciccio1, ciccio2
    sono tutti record diversi tra loro ed il distinct li stampa tutti e tre. In pratica ti evita solo i record completamente "doppioni".

    il group by invece "raggruppa" i risultati a seconda di un campo e quindi NON ti rende la lista completa ma solo un record "con i valori raggruppati" oppure UN SOLO record casuale se i campi non sono raggruppati da una funzione di aggregazione come count(), sum(), max() ecc.

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

  7. #7
    si, infatti avevo provato anche con GROUP BY ma mi mostrava solo un dato....
    ora mi è tutto più chiaro....
    I manuali vanno benissimo... ma a volte la spiegazione nel dettaglio è ancora più comprensibile!!!

    Ps. con il controllo su l'id è stato semplicissimo se a qualcuno potrebbe interessare ho realizzato un controllo del genere

    codice:
    while($ris=mysql_fetch_array($result_risposte)){
    if($verifica_id <> $ris['id']){
    echo "<div>";
    echo "Titolo: ".$ris['titolo']."
    ";
    echo "corpo: ".$ris['corpo_post']."
    ";
    echo "data: ".$ris['data']."
    <hr/>";
    }
    $verifica_id=$ris['id'];
    
    echo "<div>";
    echo "Titolo: ".$ris['risposta']."
    ";
    echo "corpo: ".$ris['data_risposta']."
    ";
    echo "</div>";
    echo "</div><hr/>";
    }
    Grazie
    Regolo76

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.