Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Distinct

  1. #1

    Distinct

    Ciao ragazzi come posso selezionare un solo in un database i record evitando ripetizioni di record uguali?

    Con distinct!

    Però nel mio caso non funziona! Perchè? Dove sbaglio?

    Codice PHP:
    $sql="SELECT distinct *";
    $sql.="FROM (squadra inner join  articolo on squadra.ID_squadra = articolo.ID_squadra) ";
    $sql.="inner join nazione on squadra.ID_nazione = nazione.ID_nazione ";
    $sql.="inner join serie on squadra.ID_serie = serie.ID_serie ";
    $query=mysql_query($sql) or die(mysql_error());
    $sql.="WHERE squadra.ID_serie = $_GET[se] and squadra.ID_nazione = $_GET[naz]";
    $query=mysql_query($sql) or die(mysql_error()); 

  2. #2
    Vi metto anche un altro pezzo


    $sql="SELECT distinct squadra.squadra, squadra.ID_squadra";
    $sql.="FROM (squadra inner join articolo on squadra.ID_squadra = articolo.ID_squadra) ";
    $sql.="inner join nazione on squadra.ID_nazione = nazione.ID_nazione ";
    $sql.="inner join serie on squadra.ID_serie = serie.ID_serie ";
    $query=mysql_query($sql) or die(mysql_error());
    $sql.="WHERE squadra.ID_serie = $_GET[se] and squadra.ID_nazione = $_GET[naz]";
    $query=mysql_query($sql) or die(mysql_error());
    while ($r = mysql_fetch_array($query))
    {
    $nome_sc = $r[squadra];
    $id_squadra = $r[ID_squadra];

    print "$nome_sc
    ";
    }

  3. #3
    se fai
    SELECT DISTINCT * FROM ...
    è ovvio che ti becca tutti i record perchè tutti i record sono distinti.
    Devi selezionare solo gli attributi che vuoi che non siamo ripetuti:
    se per esempio hai una tabella

    GIOCATORI(nome,squadra)

    in cui hai tutti i giocatori del campionato con riferimento alla squadra in cui giocano e vuoi ottenere l'elenco delle squadre allora devi fare

    SELECT DISTINCT squadra FROM giocatori;

    Se nella query ci metti anche la chiave il DISTINCT non serve più...

  4. #4
    Ti ringrazio per la tua risposta

    ho provato a fare come dici tu ma non funziona mi da errore:

    You have an error in your SQL syntax near '(squadra inner join articolo on squadra.ID_squadra = articolo.ID_squadra) inner' at line 1

    Secondo me è l'inner join che mi da problemi.

    Lo scopo è quello di non ripetere ID_squadra + di una volta e quindi ho provato così:


    $sql="SELECT distinct ID_squadra";
    $sql.="FROM (squadra inner join articolo on squadra.ID_squadra = articolo.ID_squadra) ";
    $sql.="inner join nazione on squadra.ID_nazione = nazione.ID_nazione ";
    $sql.="inner join serie on squadra.ID_serie = serie.ID_serie ";
    $query=mysql_query($sql) or die(mysql_error());
    $sql.="WHERE squadra.ID_serie = $_GET[se] and squadra.ID_nazione = $_GET[naz]";
    $query=mysql_query($sql) or die(mysql_error());
    while ($r = mysql_fetch_array($query))
    {
    $nome_sc = $r[squadra];
    $id_squadra = $r[ID_squadra];

    print "$nome_sc
    ";
    }

    Ciao e grazie

  5. #5
    se ID_squadra il problema dell'errore non è certo legato al distinct... sicuramente alla sintassi di quell'inner join.
    Prova a togliere le condizioni di join fino a farlo ritornare qualche valore poi riaggiungile una alla volta e così scopri dove sta l'errore.

  6. #6
    fatto la soluzione è questa:


    ho fatto l'inner join dove era inutile:

    $sql="SELECT distinct *";
    $sql.="FROM squadra ";
    $sql.="WHERE ID_serie = $_GET[se] and ID_nazione = $_GET[naz]";
    $query=mysql_query($sql) or die(mysql_error());
    while ($r = mysql_fetch_array($query))
    {
    $nome_sc = $r[squadra];
    $id_squadra = $r[ID_squadra];

    print "$nome_sc
    ";
    }

  7. #7
    come faccio a far comparire anche altri dati insieme a quelli sui quali faccio il distinct?

    $sql = "SELECT DISTINCT cod FROM ordini ORDER BY data";
    $query = mysql_query($sql, $connect) or die("Query non valida: ".mysql_error());
    $risultato = mysql_fetch_array($query);
    while ($risultato = mysql_fetch_array($query)) {
    echo "<tr><td>".$risultato['cod']."</td><td>".$risultato['data']."</td><td>".$risultato['mittente']."</td></tr>
    ";
    }
    Lo Zio Pas lavora in background

  8. #8
    hai due soluzioni (con comportamento ovviametne differente),
    la prima è utilizzando distinct e qui ottieni la prima occorrenza, l'altra è usando group by che serve appunto per raggruppare in base ad un elemento.

    esempio:

    voglio l'elenco delle squadre che hanno partecipato:
    select distinct id_squadra from partite


    voglio sapere quante partite ha giocato ogni squadra:
    select count(id) from partite group by id_squadra

    dipende da quello che vuoi ottenere.

  9. #9
    sei un figo! grazie!
    Lo Zio Pas lavora in background

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.