2009-05-29 7 views
5

私は、このフォーラムや他の多くから、この問題を解決するためにさまざまな方法を試してきました。私はこの問題の解決策や私にまっすぐ答えを与えるドキュメントを見つけることができないようです。MySQL:同じテーブルで異なるWHERE条件を使用して、複数のSELECTクエリを結合する方法は?

あなたは私のためにそれを見ることができたかと思いました。

おかげ

問題:

私は現在、1ラウンドのスコアを表示することができています以下の表 participant_scores リーグ ラウンド

を使用してデータベースを持っています、一度に1ラウンド...私はそれがほしいと思う方法である。 しかし、私は各参加者がすべてのラウンドで得た得点を表示したい。 2つのラウンドがあるとします。 - 参加者の名前 スコア=この現在のラウンド 合計スコアのスコア=このリーグのラウンドスコアのすべてが一緒に加え

Currently viewing league 20, Round 1 
of 2: 

User Name | Score | Total Score 

Tom  | 10  | 200 

James  | 50  | 300 

ユーザ名:私は私の結果画面の出力は次のようになりたいです。

私のMySQLクエリは以下のとおりです。厄介なことのためにお詫び申し上げます、私は約100回書き直しました。そして、この現在の方法は完全に機能する唯一の方法です。

>>あなたがここに欲しい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 

答えて

7

は、このフォームでサブクエリです:列が行ごとに計算されるように

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 

サブクエリあなたから戻ります初期クエリ。あなたのクエリにそれを追加しようとする

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 

私は、複数のリーグを含むサブクエリについて少し心配していたが、単一の参加者が、とにかく1つのリーグにのみ属することができますように見えます。これを確認するには、サブクエリに何かを含める必要があります。

+0

こんにちは、ありがとうございました。私は初心者であることをあなたに知らせなければならず、これはすべて私にとっては試行錯誤です。 私は自分のコードでエラーを特定するのに役立つプログラムを使用していますが、これまでのところ私はあなたの提案された変更でスクリプトを実行できませんでした。私はそれらを間違って入力する必要があります。 私のコードをここに再度掲載することはできません。私は240文字しか残っていません...私はそれを以下の答えに入れます。 ありがとう! – Tom

+0

また、参加者は多くのリーグに加わることができます。だから、このリーグの一員である参加者だけを選ぶというコードを入力しなければならないかもしれない。 - あなたが私にそれを披露することができるなら、その脚本を作ることができます。 もう一度ありがとう! – Tom

関連する問題