2009-05-29 17 views
5

Bu sorunu bu forumdan ve diğer birçok kaynaktan çözmek için birçok farklı yol deniyorum. Bu soruna bir çözüm ya da bana doğru bir cevap verecek herhangi bir belge bulamıyorum.MySQL: Birden çok SELECT sorgusunu, aynı tabloda farklı WHERE ölçütlerini kullanarak nasıl birleştirirsiniz?

Bana bir göz atıp bakamayacağınızı merak ettim.

Teşekkür

SORUN:

Ben ligler participant_scores aşağıdaki tablolarla mermi

bir veritabanı var ben şu anda tek bir turda puanları görüntülemek mümkün duyuyorum Her seferinde bir tur ... tam olarak nasıl istersem. Ancak, her katılımcının her tur için aldığı skoru da göstermek istiyorum. 2 turumuz olduğunu varsayalım. - katılımcının adı puanı = Bu akım yuvarlak toplam puan için puan = Bu lig toplanır için yuvarlak puanlarının tüm

Currently viewing league 20, Round 1 
of 2: 

User Name | Score | Total Score 

Tom  | 10  | 200 

James  | 50  | 300 

kullanıcı adı: benim sonuçlar ekranda çıktı böyle bir şey bakmak istiyorum.

Mysql sorgum aşağıda. Bu karışıklık için özür dilerim, yaklaşık 100 kez yeniden yazdım ve bu şu anki yol tam olarak çalışan tek yoldur.

Burada ne istiyor bu formda bir alt sorgu ise

# 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 

cevap

7

>> league_participants_query (MySQL):

bir sütun olarak alt sorgu her satır için hesaplanacaktır
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 

Eğer dönmek senin ilk sorgu.

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 

Birden ligler dahil alt sorgu hakkında biraz endişeliydi, ancak tek katılımcı yalnızca zaten bir lige ait olabilir gibi görünüyor:

Sorgunuzun içine eklemeyi deneyin. Bunu kontrol etmek için alt sorguya bir şeyler eklemeniz gerekebilir.

+0

Merhaba, Derinlik yanıtınız için teşekkür ederiz. Yeni başlayan olduğumu ve tüm bunların benim için deneme yanılma olduğunu bilmemize izin vermeliyim. Kodumdaki hataları tanımlamama yardımcı olacak bir program kullanıyorum, ancak şu ana kadar komutumun önerilen değişikliklerinizle çalışmasını sağlayamadım. Onları yanlış girmeliyim. Kodumu burada tekrar göndermeme izin vermiyor. Sadece 240 karakterim kaldı ... Aşağıya bir cevap yazacağım. Teşekkürler! – Tom

+0

Ayrıca, katılımcıların birçok ligin üyesi olabileceğini belirtmek isterim. Bu nedenle, sadece bu ligin bir parçası olan katılımcıları seçmek için bir kod koymayı deneyebiliriz. - Bana bir bacak verebilirsen bu senaryoyu yapabilirim. Tekrar teşekkürler! – Tom

İlgili konular