• User Newbie

    Visualizzare righe che hanno campi uguali (>=2) ... chi mi puo' aiutare ?

    Carissimi sono nuovo di questo forum e dopo averle provate tutte ....davvero tutte ,
    ho deciso di scrivere a voi sperando che qualcuno abbia 5 minuti liberi per me.

    La mia esigenza e' abbastanza semplice vi spiego la situazione. Io ho tre tabelle:

    risultati(id,idgara,idatleta,etc,etc,)
    gare(id,nome,etc,etc)
    atleti(id,nome,etc,etc)

    poi ci sono altri campi che in questo momento non sono interessanti , la query che
    devo fare passa in input due idatleti e quello che avrei bisogno e la visualizzazione
    delle sole gare a cui hanno partecipato entrambi.

    Purtroppo tutti i tentativi fatti non hanno portato alla soluzione definitiva sono solo
    arrivato a fare una select struttutara cosi:

    SELECT atleti.nome as Atleta, gare.nome as Gara FROM risultati INNER JOIN gare on risultati.idgara = gare.id INNER JOIN atleti on risultati.idatleta = atleti.id WHERE risultati.idatleta = 54 OR risultati.idatleta=50 order by gare.data;

    pero' restituisce tutte le gare fatte da entrambi gli atleti e non quelle a cui hanno partecipato
    tutti e due contemporaneamente.

    Chi di voi mi puo' aiutare ?
    Grazie a tutti !
    Saluti
    Willy


  • User Attivo

    Credo che sia un problema di tabelle. Scusami la tabella risultati in che modo è relazionata, c'è un id atleta, ma è quello che ha segnato? Quindi ad ogni variazione di risultato ce una riga in risultati con l'id dell'atleta che ha segnato? Prova cn qualcosa di simile

    
    SELECT * FROM gare WHERE id IN (SELECT idgara FROM risultati AS t0 JOIN risultati AS t1 ON t1.id=t0.id AND t1.idatleta=50 WHERE t0.idatleta=54)
    
    

  • User Newbie

    Carissimo
    innanzitutto grazie per la tua attenzione. Ho provato subito la query pero' ottengo un errore , pare di
    logica:

    "#1052 - Colonna: 'idgara' di field list e` ambigua"

    Come mi hai giustamente chiesto ti spiego meglio la relazione e l'uso delle tabelle.

    La tabella risultati contiene tutti gli eventi sportivi a cui gli atleti
    hanno partecipato, per esempio:

    risultati (1, 11, 21)
    risultati (2, 12, 21)
    risultati (3, 12, 22)

    gare (11, "TORNEO TENNIS 1")
    gare (12, "TORNEO TENNIS 2")

    atleti(21, "Rossi Carlo")
    atleti(22, "Bianchi Massimo")

    quindi la tabella risultati e' legata alle altre due cosi':

    risultati , gare
    --------- , ---------
    idgara -------------> id

    risultati , atleti
    --------- , ---------
    idatleti -------------> id

    a parte lo schema un po' troppo rozzo , posso dirvi che ci sono vincoli
    di integrita referenziale fra le tre tabelle ovvero:

    risultati(idatleti)->atleti(id)
    risultati(idgare)->gare(id)

    Quindi il mio obiettivo e' quello di visualizzare , e non di contare come hai giustamente capito,
    solo i risultati , tutti i valori di questa tabella , a cui hanno partecipato entrambi gli atleti.

    Se vi viene qualche altra idea per favore fatemi sapere.

    Grazie mille.


  • User Attivo

    se il problema è il msg puoi usare SELECT t0.idgara oppure t1.idgara


  • User Newbie

    Ciao !

    sto provando questa:

    SELECT * FROM gare WHERE id IN (SELECT t1.idgara FROM risultati AS t0 JOIN risultati AS t1 ON t1.id=t0.id AND t1.idatleta=50 WHERE t0.idatleta=54)

    adesso la query non da errore e viene eseguita ma purtroppo non visualizza alcun risultato.

    Qualche idea ?

    Grazie ancora


  • User Newbie

    Ciao a tutti,
    se non riesco a fare tutto con SQL eventualmente ci sarebbe una soluzione SQL+PHP ?
    Ovvero estraggo i dati con una select piu' ampia e poi con PHP filtro solo i risultati con le
    caratteristiche che mi servono.
    Grazie ancora.
    Willy