Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di skypatrik
    Registrato dal
    Aug 2007
    residenza
    Latina
    Messaggi
    34

    Ricerca record su pi� colonne e tabelle mysql

    Sono sicuro che esiste il metodo ma � parecchio che non pratico con SQL.
    Sto cercando di gestire, con python, un database di un gioco multiplayer a squadre da 5.
    I match vengono registrati su tabelle settimanali riportando per colonna: id, giocatore 1, 2, 3, 4, 5 (cinque colonne), risultato, data, squadra avversaria. Tranne l'id (chiave primaria ecc ecc) tutte le altre colonne sono formattate in CHAR, anche la data. In modo da gestire tutto tramite stringhe python.
    Ogni squadra cambia spesso giocatore cosi registro i match annotando il numero id di ogni giocatore.
    In ogni match ogni giocatore ha un ruolo ben preciso per cui viene registrato su una colonna precisa della tabella match. Ovviamente al match successivo pu� cambiare ruolo/colonna.
    Ora il mio problema � che con 72 giocatori se volessi vedere quale giocatore ha giocato con 1, 2, 3 o 4 (contemporaneamente) specifici giocatori e quante volte e con che risultato, dovrei creare tutta una serie di cicli for da farmi fondere il mio Atom del 2011.

    C'� una funzione MySql con cui "sondare" tutta la tabella in cerca (e contandole COUNT) di una o pi� variabili che devono trovarsi sulla stessa ROW? Grazie

    Della serie: SELECT (*), COUNT(*) FROM tab_match01 WHERE (*) = 12, 34, 54, 70
    Il Customer Service Gratis di Linux migliore di quello a pagamento della Microsoft e Apple... chiusa la discussione.

  2. #2

  3. #3
    Utente di HTML.it L'avatar di skypatrik
    Registrato dal
    Aug 2007
    residenza
    Latina
    Messaggi
    34
    Quote Originariamente inviata da optime Visualizza il messaggio
    fa' un esempio pls
    Allora ho una tabella "players" dove sono annotati i nomi dei giocatori. Ad ogni giocatore corrisponde il classico numero "id".
    Ogni settimana apro una tabella "week_match01-2021" con le colonne
    "id" = id match
    "pl1"= player.id del giocatore 1 della squadra rossa
    "pl2"= player.id del giocatore 2 della squadra rossa
    "pl3"= player.id del giocatore 3 della squadra rossa
    "pl4"= player.id del giocatore 4 della squadra rossa
    "pl5"= player.id del giocatore 5 della squadra rossa
    "res"= risultato in forma di stringa "10-8"
    "pl6"= player.id del giocatore 1 della squadra blu
    "pl7"= player.id del giocatore 2 della squadra blu
    "pl8"= player.id del giocatore 3 della squadra blu
    "pl9"= player.id del giocatore 4 della squadra blu
    "pl10"= player.id del giocatore 5 della squadra blu
    "data"= data sempre in forma di stringa "dd-mm-aaaa"

    id pl1 pl2 pl3 pl4 pl5 res pl6 pl7 pl8 pl9 pl10 data
    1 34 24 2 65 72 10-8 33 1 22 67 8 01-01-2021
    2 67 66 2 45 12 5-10 33 11 15 56 47 01-01-2021
    3 65 8 55 1 34 9-10 3 22 21 24 20 01-01-2021
    4 65 69 2 70 34 2-10 72 44 36 8 1 01-01-2021

    Come puoi vedere alcune squadre hanno giocatori che stanno spesso nella stessa squadra.
    Quindi ad esempio vorrei vedere il giocatore 34 con chi gioca pi� spesso e magari con che ricorrenza.
    In questo esempio, nelle 4 partite ha giocato spesso con i giocatori: 3 volte con il 65 e 2 volte con il numero 2..... e addirittura 2 volte sia con il numero 2 che con il 65.
    Stessa cosa per i giocatori 1 e 8 che si son ritrovati nella stessa squadra 2 volte.

    Ora, presupponendo che ho 52 tabelle all'anno con centinaia di righe ciascuna, vorrei vedere in 1 anno un giocatore quante volte si � trovato a giocare sempre con gli stessi compagni di squadra e analizzare i risultati dei match. Cosi da poter ipotizzare una migliore collaborazione tra giocatori. E cos� con tante altre ipotesi statistiche.

    C'� una formula in SQL che non mi obblighi a cercare colonna per colonna le corrispondenze? Qualcosa tipo "CONTAMI e dimmi l'id del match dalla tabella "week_match01" tutte le righe dove compaiono i numeri 34, 65 e 2" oppure "dove compare solo il 65 e 34"...

    sono riuscito a farmi comprendere?
    Il Customer Service Gratis di Linux migliore di quello a pagamento della Microsoft e Apple... chiusa la discussione.

  4. #4
    purtroppo questo modo di progettare il db come fosse un foglio excel non aiuta. comunque, vediamo:

    per capire se 1 giocatore (es, il 34) ha giocato in una partita dovrai fare

    codice:
    WHERE (pl1=34 OR pl2=34 OR .... fino a pl10)
    per vedere se 2 giocatori (es, il 34 e il 18) hanno giocato nella stessa partita dovrai fare

    codice:
    WHERE (pl1=34 OR pl2=34 OR .... fino a pl10) AND (pl1=18 OR pl2=18 OR .... fino a pl10)
    e cos via. Tutto questo per vedere SE e QUANDO hanno giocato. Per capire con/contro quale/quali giocatori un certo giocatore ha giocato pi spesso, con questa rappresentazione secondo me non te la cavi. Una rappresentazione efficace sarebbe stata

    tabGiocatori
    ---------------
    idGiocatore
    nome

    tabPartite
    --------------
    idPartita
    data
    risultato

    tabRuoli
    ----------
    idRuolo
    descrizione

    tabPresenze
    ----------------
    idPartita
    idGiocatore
    idRuolo


    non capisco poi perch fai una tabella per settimana, visto che hai il campo data (mettilo in formato YYYY-MM-AA, cos puoi fare riordinamenti, confronti etc)

  5. #5
    Utente di HTML.it L'avatar di skypatrik
    Registrato dal
    Aug 2007
    residenza
    Latina
    Messaggi
    34
    Hai ragione su tutto... grazie
    Il fatto che volevo fare un file riassuntivo per ogni singolo giocatore riguardo le volte che ha giocato, con chi e in che percentuale andata bene. Quindi mi toccher annidare 5 cicli for per dargli idea con chi ha pi affinit. In ogni caso, mi metto all opera e vediamo se il processore regge i cicli for. Altrimenti riscrivo tutto sulla tua soluzione.
    Il Customer Service Gratis di Linux migliore di quello a pagamento della Microsoft e Apple... chiusa la discussione.

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