2009-05-29 13 views
5

Próbowałem rozwiązać na wiele sposobów ten problem z tego forum i wielu innych. Nie mogę znaleźć rozwiązania tego problemu ani żadnej dokumentacji, która da mi prostą odpowiedź.MySQL: Jak połączyć wiele zapytań SELECT, używając różnych kryteriów WHERE w tej samej tabeli?

Zastanawiałem się, czy mógłbyś mi na to spojrzeć.

Dzięki

PROBLEM:

Mam bazę danych z poniższych tabelach participant_scores lig rund

Obecnie jestem w stanie wyświetlić wyniki pojedynczej rundzie , jedna runda na raz ... dokładnie tak, jak tego chcę. Ale chcę również wyświetlić wynik, jaki każdy uczestnik otrzymał dla wszystkich rund. Powiedzmy, że mamy 2 rundy. Chcę wyjście na moim ekranie wyników wyglądać mniej więcej tak:

Currently viewing league 20, Round 1 
of 2: 

User Name | Score | Total Score 

Tom  | 10  | 200 

James  | 50  | 300 

Username - wynik uczestnika nazwa = wynik ten bieżącej rundy całkowity wynik = wszystkie wyniki rundy na to liga dodawanych razem.

Moje zapytanie Mysql znajduje się poniżej. Przepraszam za tę nieprzyzwoitość, przepisałem ją około 100 razy i ta aktualna metoda jest jedynym sposobem, który działa w pełni.

>> league_participants_query (mysql)

# FIELDS 
    SELECT  
     participants.participant_id,           # ID - used for functions 
     participants.participant_name,          # NAME 
     participants.participant_gender,          # Participant info    
     classes.class_name,             # Class name 
     schools.school_name,             # School name 
     participant_scores.participant_score,         # Participant score 
     participant_scores.participant_score_id 



    # TABLES 
    FROM   participant_scores, participants, classes, league_schools, schools, leagues, rounds  


    # filter leagues 
    WHERE  leagues.league_id    =  51 

    AND   rounds.league_id    =  51 # the current league we are viewing 
    AND   rounds.round_id     =  25 # the current round of the league we are viewing 

    # filter league schools 
    AND   participant_scores.round_id  =  25 # the current round of the league we are viewing 

    # filter schools allowed 
    AND   league_schools.league_id  =  51 # the current league we are viewing 

    # Filter schools 
    AND   schools.school_id    =  league_schools.school_id 

    # Filter classes 
    AND   classes.school_id    =  schools.school_id           
    AND   classes.year_group_id   =  leagues.year_group_id 

    # Filter participants 
    AND   participants.class_id   =  classes.class_id 

    # Filter participant_scores 
    AND   participant_scores.participant_id =  participants.participant_id 

    #Grouping 
    GROUP BY  participants.participant_id 

Odpowiedz

7

Co chcesz o to podzapytanie w tej formie:

SELECT 
    name, 
    round, 
    score, 
    (select sum(score) from scores sc where sc.userid = users.userid) total 
FROM users INNER JOIN scores on users.userid = scores.scoreid 

Podzapytanie jako kolumny będą obliczane dla każdego wiersza powrocie z wstępne zapytanie.

Aby spróbować dodać go do zapytania:

SELECT 
    participants.participant_id, 
    participants.participant_name, 
    participants.participant_gender, 
    classes.class_name, 
    schools.school_name, 
    participant_scores.participant_score, 
    participant_scores.participant_score_id, 
    (SELECT sum(participant_score) FROM participant_scores tbl_scores2 
    WHERE tbl_scores2.participant_score_id = participants.participant_id) total 
FROM participant_scores, participants, classes, 
    league_schools, schools, leagues, rounds 
WHERE 
    leagues.league_id = 51 AND 
    rounds.league_id = 51 AND 
    rounds.round_id = 25 AND 
    participant_scores.round_id = 25 AND 
    league_schools.league_id = 51 AND 
    schools.school_id = league_schools.school_id AND 
    classes.school_id = schools.school_id AND 
    classes.year_group_id = leagues.year_group_id AND 
    participants.class_id = classes.class_id AND 
    participant_scores.participant_id = participants.participant_id 
GROUP BY 
    participants.participant_id 

Byłem trochę zaniepokojony podzapytaniu tym wielu lig, ale wygląda na to jeden uczestnik może należeć tylko do jednej ligi mimo to. Aby to sprawdzić, może być konieczne dołączenie czegoś do podkwerendy.

+0

Witam, dziękuję za odpowiedź w głębi. Muszę cię poinformować, że jestem początkującym i wszystko to jest dla mnie próbą i błędem. Używam programu, który pomoże mi zidentyfikować błędy w moim kodzie, ale do tej pory nie udało mi się uruchomić skryptu z sugerowanymi zmianami. Muszę ich źle wprowadzać. To nie pozwoli mi ponownie opublikować mojego kodu tutaj. Zostało mi tylko 240 znaków ... Odpowiem poniżej. Dzięki! – Tom

+0

Chciałbym również zauważyć, że uczestnicy mogą należeć do wielu lig. Być może będziemy musieli spróbować wprowadzić kod, aby wybrać tylko uczestników, którzy są częścią tej ligi. - Mogę zbudować ten skrypt, jeśli mógłbyś mi z tym pomóc. Jeszcze raz dziękuję! – Tom

Powiązane problemy