Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    62

    [MYSQL] Aiuto query classifica

    Ciao a tutti, ho un DB così composto:
    Utenti:id,user,pass
    Giornate:id,voto,cod_utente

    Ora devo riuscire a gestire una sorta di classifica, nel senso mi servirebbe una query che mi mostra in uscita il nome dell'user e la somma dei voti totali di quell'user.
    Ho provato a fare la query in questo modo ma mi esce un valore troppo alto della somma dei voti, ma + che altro mi da sempre lo stesso user.

    codice:
    SELECT user, SUM(voto) FROM giornate,utenti GROUP BY cod_utente ORDER BY voto DESC
    Dove sbaglio? Grazie x l'eventuale risposta

  2. #2
    SELECT user, SUM(voto)
    FROM giornate join utenti on cod_utente=user
    GROUP BY user
    ORDER BY voto DESC

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    62
    Giusto il JOIN come non pensarci

    Grazie mille

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    62
    Mmmh guarda già che ci sono ne approfitto per chiedere un'altra cosa senza aprire un thread.

    Ho quest'altra query

    codice:
    SELECT nome FROM calciatori WHERE id_calciatore =60 OR id_calciatore =12 OR id_calciatore =205 OR id_calciatore =100  ecc. ecc.
    In pratica mi seleziona dal mio db tutti i calciatori in ordine di come sono stati inseriti. Il problema è che quando faccio la fetch array, per visualizzarli, in automatico me li riordina per il loro id in ordine crescente.
    Sai il motivo?

  5. #5
    se non specifichi una ORDER BY vengono su nel modo che più piace alla macchina

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    62
    Nella mia tabella giornate ho l'id giornata, quell'id si autoincrementa quindi tiene conto dell'ordine in cui vengono inseriti i giocatori.
    Se la faccio xò mi scombussola un po le cose, tipo esce due volte l'elenco. Oppure mi da l'ordine casuale.

    Ti provo a lascaire il codice, se non capisci qualcosa chiedi pure, ho cmq fatto dei commenti
    le tabelle sono composte come ho scritto nel primo post. Dentro giornate ci sono 5 campi:
    id,voto,cod_calciatore,cod_utente,num_giornata
    Naturalmente cod_calciatore e cod_utente si possono ripetere, cambieranno xò gli id e il num della giornata.
    Quello che devo fare ora è selezionare i nomi, in base alla giornata scelta.
    codice:
     if( isset($_POST["giorn"]) ){ #controllo se è stata selezionata una giornata
     $formid="SELECT cod_calciatore,voto FROM giornate WHERE num_giornata = ".$_POST['giorn']." AND cod_utente = ".$_SESSION['id_utente']." "; #Query per selezionare tutti i cod_calciatori passati
     $q_formid=mysql_query($formid);
     $nomi="SELECT nome FROM calciatori,giornate WHERE "; # Query per recuperare i nomi dei calciatori passati.
     $i=18; #Inizializzo un contatore a 18 (il num max dei calciatori schierabili)
     while($i>0){
     $mfa_formid=mysql_fetch_array($q_formid); #Recupero i cod calciatori tramite la fetch array della query precedente
      $nomi.=" id_calciatore =".$mfa_formid["cod_calciatore"]." ";
        if ($i != 1)
        $nomi.=" OR"; #Concateno i vari cod calciatori finchè ne rimane soltato uno
    	$i--;
    }
    $nomi.="AND num_giornata = ".$_POST['giorn']." ORDER BY id_giornata";
    L'ultimo pezzo di codice l'ho appena aggiunto.

    Ho provato anche direttamente dal server a fare delle prove col join:
    codice:
    SELECT nome FROM calciatori JOIN giornate ON id_calciatore =1 OR id_calciatore =95 OR id_calciatore =205 OR id_calciatore =100 OR id_calciatore =290 ecc. ecc. WHERE num_giornata = 1 ORDER BY id_giornata
    In questo modo ad esempio mi butta fuori due volte i nomi e li ordina non in modo corretto.

  7. #7
    nella SELECT la JOIN è proprio fatta male. hai confuso gli operatori ON della join con quello che andrebbe nella where. sistemala

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    62
    Ok, l'ho messa a posto così:

    codice:
    SELECT nome FROM calciatori JOIN giornate ON id_calciatore = cod_calciatore WHERE cod_calciatore =1 OR cod_calciatore =95 OR cod_calciatore =205 OR cod_calciatore =100 OR cod_calciatore =290 AND num_giornata =1 ORDER BY id_giornata
    Ora funzia, il problema è che mi da sempre fuori due volte quei nomi.. non capisco.

  9. #9
    racchiudi tutte le OR assieme in un'unica coppia di parentesi ... WHERE (...OR...OR...OR...) AND ..

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.