Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Query su MYSql

  1. #1

    Query su MYSql

    Salve, devo eseguire una query abbastanza complessa su MySql. Intanto vi elenco le tabelle:

    Players (id_pl, nome,cognome, soprannome, data_nascita, sesso, data_iscrizione, freeze, email, pw, indirizzo, citta,telefono,sm, livello, nome_club)
    Tavoli(id_tavolo,id_partita,valido)
    Gioca_pl_ta (id_tavolo,id_pl,posizione,n_obb,punti_obb,punti_f uori_obb,punti_partita)

    Gioca_pl_ta � la tabella che viene fuori dalla relazione n:n tra Players e Gioca_pl_ta. Posizione indica la posizione in classifica.
    Il cliente mi chiede di trovare i carnefici e le vittime di un dato utente. I carnefici sono quelli che lo hanno battuto pi� volte (es. i primi 5) mentre le vittime sono quelli che hanno perso pi� volte(es. i primi 5).

    Chi pu� darmi una mano?

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    523
    sono necessari alcuni chiarimenti,

    forse si doveva scrivere
    che viene fuori dalla relazione n:n tra Players e Tavoli

    una partita si gioca su più tavoli ?

    Posizione indica la posizione in classifica, rispetto a cosa, tavolo, partita o generale ?

    battuti, a quale livello ( vedi posizione in classifica ) ?

    considerato che,
    Players contiene solo dati anagrafici, ininfluenti sul "calcolo", suggerisco di trascurarla al momento,
    Tavoli contiene l'id della partita, cercherei di lavorare su un'unica "tabella" generandola con una select
    codice:
    select
      g.id_pl
    , t.id_partita
    , g.id_tavolo
    , g.posizione
    , g.n_obb
    , g.punti_obb
    , g.punti_fuori_obb
    , g.punti_partita
    from 
      Gioca_pl_ta g
    , Tavoli t
    where
      g.id_tavolo = t.id_tavolo

    presupposto che i tavoli nella tabella "g" siano tutti presenti nella "t" come dovrebbero essere

    suggerirei di fare select successive per ottenere il risultato controllando passo per passo

    in funzione dei chiarimenti, sarà possibile definire la select successiva
    select t1.* from ( select soprastante ) t1 ....
    lavorando sempre su una tabella risultante
    e solo alla fine aggiungere i dati anagrafici per la presentazione

    Ultima modifica di marino51; 28-10-2020 a 00:17

  3. #3
    1. che relazione c'è tra i tavoli e le partite
    2. come si fa a capire chi ha vinto e chi ha perso (dando per scontato che si giochi uno contro uno)

  4. #4
    Il db riguarda un applicazione di Risiko
    una partita si gioca su più tavoli ? In una partita ci possono essere più tavoli, è una relazione 1:N.
    Ti elenco anche la tabella Partite (id_partita,n_partita,data_p,nome_torneo)

    Posizione indica la posizione in classifica, rispetto a cosa, tavolo, partita o generale ? Al tavolo

    Quote Originariamente inviata da marino51 Visualizza il messaggio
    sono necessari alcuni chiarimenti,

    forse si doveva scrivere
    che viene fuori dalla relazione n:n tra Players e Tavoli

    esatto



    battuti, a quale livello ( vedi posizione in classifica ) ?

    considerato che,
    Players contiene solo dati anagrafici, ininfluenti sul "calcolo", suggerisco di trascurarla al momento,
    Tavoli contiene l'id della partita, cercherei di lavorare su un'unica "tabella" generandola con una select
    codice:
    select
      g.id_pl
    , t.id_partita
    , g.id_tavolo
    , g.posizione
    , g.n_obb
    , g.punti_obb
    , g.punti_fuori_obb
    , g.punti_partita
    from 
      Gioca_pl_ta g
    , Tavoli t
    where
      g.id_tavolo = t.id_tavolo

    presupposto che i tavoli nella tabella "g" siano tutti presenti nella "t" come dovrebbero essere

    suggerirei di fare select successive per ottenere il risultato controllando passo per passo

    in funzione dei chiarimenti, sarà possibile definire la select successiva
    select t1.* from ( select soprastante ) t1 ....
    lavorando sempre su una tabella risultante
    e solo alla fine aggiungere i dati anagrafici per la presentazione


  5. #5
    1. che relazione c'è tra i tavoli e le partite La relazione é 1:N. In una partita ci sono più tavoli, un tavolo può appartenere ad una sola partita
    2. come si fa a capire chi ha vinto e chi ha perso (dando per scontato che si giochi uno contro uno)
    Quando punti_partita > 100 in un tavolo si sa il giocatore vincitore, in un tavolo ci sono più persone, non uno contro uno
    [/QUOTE]
    Quote Originariamente inviata da optime Visualizza il messaggio
    1. che relazione c'è tra i tavoli e le partite
    2. come si fa a capire chi ha vinto e chi ha perso (dando per scontato che si giochi uno contro uno)

  6. #6
    Quote Originariamente inviata da danielebarisano Visualizza il messaggio
    2. come si fa a capire chi ha vinto e chi ha perso (dando per scontato che si giochi uno contro uno)
    Quando punti_partita > 100 in un tavolo si sa il giocatore vincitore, in un tavolo ci sono più persone, non uno contro uno
    immagino quindi che uno vince e TUTTI gli altri perdono

  7. #7
    Quote Originariamente inviata da marino51 Visualizza il messaggio
    sono necessari alcuni chiarimenti,

    forse si doveva scrivere
    che viene fuori dalla relazione n:n tra Players e Tavoli

    una partita si gioca su più tavoli ?

    Posizione indica la posizione in classifica, rispetto a cosa, tavolo, partita o generale ?

    battuti, a quale livello ( vedi posizione in classifica ) ?

    considerato che,
    Players contiene solo dati anagrafici, ininfluenti sul "calcolo", suggerisco di trascurarla al momento,
    Tavoli contiene l'id della partita, cercherei di lavorare su un'unica "tabella" generandola con una select
    codice:
    select
      g.id_pl
    , t.id_partita
    , g.id_tavolo
    , g.posizione
    , g.n_obb
    , g.punti_obb
    , g.punti_fuori_obb
    , g.punti_partita
    from 
      Gioca_pl_ta g
    , Tavoli t
    where
      g.id_tavolo = t.id_tavolo

    presupposto che i tavoli nella tabella "g" siano tutti presenti nella "t" come dovrebbero essere

    suggerirei di fare select successive per ottenere il risultato controllando passo per passo

    in funzione dei chiarimenti, sarà possibile definire la select successiva
    select t1.* from ( select soprastante ) t1 ....
    lavorando sempre su una tabella risultante
    e solo alla fine aggiungere i dati anagrafici per la presentazione

    Ciao Marino51, la query per fare quello che ho chiesto è possibile postarla?

  8. #8
    Quote Originariamente inviata da danielebarisano Visualizza il messaggio
    Ciao Marino51, la query per fare quello che ho chiesto è possibile postarla?
    Non è questo lo spirito del forum: qui discute, non si ordinano query à la carte.

    Esponi bene il tuo problema, posta tu almeno una bozza di soluzione e assieme vediamo di darti una mano.


  9. #9
    Ciao, ho scritto questa query per i carnefici:

    codice:
    SELECT DISTINCT cognome, nome, posizione FROM Players, Gioca_pl_ta
    WHERE Players.id_pl = Gioca_pl_ta.id_pl AND posizione < ANY( SELECT posizione FROM Gioca_pl_ta, Players, Tavoli
    WHERE Players.id_pl = Gioca_pl_ta.id_pl AND Gioca_pl_ta.id_tavolo = Tavoli.id_tavolo AND cognome = '$cognome'
    AND nome ='$nome' AND posizione='2') LIMIT5"
    
    Praticamente stampo cognome, nome, posizione dei giocatori che hanno giocato al tavolo e hanno posizione <2 (significa che hanno vinto) dato un certo players (cognome e nome). Che ne dite?

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 © 2024 vBulletin Solutions, Inc. All rights reserved.