Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Join sql o altro?

  1. #1

    Join sql o altro?

    Anche questa volta non so da dove cominciare, confido in una vostra idea:

    Possiedo due tabella, una squadre e l'altra calciatori forti.
    La tabella squadre contiene i seguenti campi:
    [list=1][*]id[*]nome squadra[*]nomi giocatori (divisi tra loro da virgole)[/list=1]
    La tabella calciatori forti contiene i seguenti campi:
    [list=1][*]id[*]nome giocatore[*]descrizione abilità[/list=1]
    Come posso fare per estrarre tutti i giocatori di una data squadra, evidenziando in grassetto quelli forti?

  2. #2
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    non mi sembra molto felice la scelta di usare un campo per inserirvi tutti i giocatori separati da una virgola... se posso ti suggerisco una struttura diversa

    codice:
    squadre
    ---
    id INT
    squadra VARCHAR
    
    
    giocatori
    ---
    id INT
    id_squadra (f.k. a squadre.id) INT
    nome VARCHAR
    forte (1|0) (1 se forte 0 altrimenti)
    Per selezionare tutti i giocatori di una data squadra

    codice:
    SELECT * FROM giocatori g
    JOIN squadre s ON g.id_squadra = s.id
    WHERE s.squadra = "atalanta"

    poi quando scorri il resultset

    codice:
    while ($row = mysql_fetch_array($resultset)) {
        echo ($row['forte'] == 1)? "". $row['nome']."" : $row['nome']; 
    }

    Ciao
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  3. #3
    non mi sembra molto felice la scelta di usare un campo per inserirvi tutti i giocatori separati da una virgola... se posso ti suggerisco una struttura diversa
    Hai perfettamente ragione, anche a me non sembra il massimo la scelta che ho fatto. Ma l'esempio dei calciatori e delle squadre serve a semplificare il mio progetto.
    L'idea che mi hai suggerito è ottima, ma non la posso utilizzare perchè il mio progetto prevede che un giocatore possa giocare in più squadre.

    In ogni caso, ho trovato questa soluzione:

    for($a=0; $a < $num_calciatori; $a++){
    if(in_array(trim($array_calciatori_tabella_squadre[$a]), $array_calciatori_tabella_calciatori-forti)){
    echo "$array_calciatori_tabella_squadre[$a], ";
    }else{
    echo "$array_calciatori_tabella_squadre[$a], ";
    }
    }

    Spiego da cosa ho ottenuto alcune variabili:
    $array_calciatori_tabella_squadre[$a] è stata ottenuta con la funzione explode applicata al campo nomi giocatori della tabella squadre.
    array_calciatori_tabella_calciatori-forti l'ho ottenuta ponendo in un unico array tutti i calciatori forti.

    Ma così non va bene lo stesso!!!
    Infatti, vorrei fare in modo che a fianco di ogni calciatore forte appaia tra parentesi la descrizione delle sue abilità (colonna della tabella calciatori). Ma il codice che vi ho mostrato non me lo permette.
    Help.

  4. #4
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    1)
    Originariamente inviato da !!\Freedom9/!!
    L'idea che mi hai suggerito è ottima, ma non la posso utilizzare perchè il mio progetto prevede che un giocatore possa giocare in più squadre.
    2)
    Originariamente inviato da !!\Freedom9/!!
    Infatti, vorrei fare in modo che a fianco di ogni calciatore forte appaia tra parentesi la descrizione delle sue abilità (colonna della tabella calciatori). Ma il codice che vi ho mostrato non me lo permette.
    Help.
    Quindi vuoi
    - un giocatore in più squadre
    - avere attributi per un giocatore forte

    Facendo un ulteriore normalizzazione sulla base di dati

    codice:
    squadre
    ---
    id INT
    squadra VARCHAR
    
    giocatori
    ---
    id INT
    nome VARCHAR
    forte (1|0) (1 se forte 0 altrimenti)
    giocatori_squadre
    ---
    id_giocatore INT (f.k. giocatore.id)
    id_squadra INT (f.k. squadra.id) (le due colonne formano una chiave UNIQUE)

    abilità
    ---
    id_giocatore INT (f.k. giocatore.id)
    potenza INT
    velocità INT
    tecnica INT
    stamina INT
    ...

    [/code]


    Ora: devi fare un elenco di giocatori di una squadra, grassettare i forti e mostrare le abilità di ciascuno?

    codice:
    SELECT * FROM giocatori g
    JOIN giocatori_squadre gs ON g.id = gs.id_giocatore
    JOIN squadre s ON gs.id_squadra = s.id
    WHERE s.squadra = 'Longobarda'
    
    ...
    
    while ($row = mysql_fetch_array($resultset)) {
        echo ($row['forte'] == 1)? "". $row['nome']."" : $row['nome'];
        echo "(potenza : " . row['potenza'] .") "; 
        echo "(velocità : " . row['velocita'] .") "; 
        ....
        echo "
    ";
    }
    Può andare?
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  5. #5
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    1)
    Originariamente inviato da !!\Freedom9/!!
    L'idea che mi hai suggerito è ottima, ma non la posso utilizzare perchè il mio progetto prevede che un giocatore possa giocare in più squadre.
    2)
    Originariamente inviato da !!\Freedom9/!!
    Infatti, vorrei fare in modo che a fianco di ogni calciatore forte appaia tra parentesi la descrizione delle sue abilità (colonna della tabella calciatori). Ma il codice che vi ho mostrato non me lo permette.
    Help.
    Quindi vuoi
    - un giocatore in più squadre
    - avere attributi per i giocatori

    Facendo un ulteriore normalizzazione sulla base di dati

    codice:
    squadre
    ---
    id INT
    squadra VARCHAR
    
    giocatori
    ---
    id INT
    nome VARCHAR
    forte (1|0) (1 se forte 0 altrimenti)
    
    
    giocatori_squadre
    ---
    id_giocatore INT (f.k. giocatore.id) 
    id_squadra INT (f.k. squadra.id) (le due colonne formano una chiave UNIQUE)
    
    abilità
    ---
    id_giocatore INT (f.k. giocatore.id) 
    potenza INT
    velocità INT
    tecnica INT
    stamina INT
    ...

    Ora: devi fare un elenco di giocatori di una squadra, grassettare i forti e mostrare le abilità di ciascuno?

    codice:
    SELECT * FROM giocatori g
    JOIN giocatori_squadre gs ON g.id = gs.id_giocatore
    JOIN squadre s ON gs.id_squadra = s.id
    JOIN abilita a ON g.id = a.id_giocatore
    WHERE s.squadra = 'Longobarda'
    
    ...
    
    while ($row = mysql_fetch_array($resultset)) {
        echo ($row['forte'] == 1)? "". $row['nome']."" : $row['nome'];
        echo "(potenza : " . row['potenza'] .") "; 
        echo "(velocità : " . row['velocita'] .") "; 
        ....
        echo "
    ";
    }
    Può andare?
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

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.