2009-05-29 31 views
5

Tôi đã thử nhiều cách khác nhau để giải quyết vấn đề này từ diễn đàn này và từ nhiều người khác. Tôi dường như không thể tìm ra giải pháp cho vấn đề này hoặc bất kỳ tài liệu nào sẽ cho tôi một câu trả lời thẳng.MySQL: Cách kết hợp nhiều truy vấn SELECT, sử dụng các tiêu chí WHERE khác nhau trên cùng một bảng?

Tôi tự hỏi liệu bạn có thể xem nó cho tôi không.

Cảm ơn

CÁC VẤN ĐỀ:

Tôi đã có một cơ sở dữ liệu với các bảng sau participant_scores giải đấu vòng

Tôi hiện đang có khả năng hiển thị điểm số của một vòng duy nhất , một vòng tại một thời điểm ... đó là chính xác như thế nào tôi muốn nó. Nhưng tôi cũng muốn hiển thị điểm số mà mỗi người tham gia nhận được cho tất cả các vòng. Cho phép nói rằng chúng tôi có 2 vòng. Tôi muốn đầu ra trên màn hình kết quả của tôi để tìm một cái gì đó như thế này:

Currently viewing league 20, Round 1 
of 2: 

User Name | Score | Total Score 

Tom  | 10  | 200 

James  | 50  | 300 

tên người dùng - điểm tên của người tham gia = số điểm cho tổng số điểm vòng hiện nay = tất cả các điểm tròn cho giải đấu này vào với nhau.

Truy vấn Mysql của tôi ở bên dưới. Xin lỗi vì sự lộn xộn của nó, tôi đã viết lại nó khoảng 100 lần và cách hiện tại này là cách duy nhất hoạt động hoàn toàn.

>> 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 

Trả lời

7

Những gì bạn muốn ở đây là một subquery theo hình thức này:

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 

Các subquery như một cột sẽ được tính toán cho mỗi hàng bạn trở về từ của bạn truy vấn ban đầu.

Để cố gắng thêm nó vào truy vấn của bạn:

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 

tôi là một chút lo lắng về subquery bao gồm nhiều giải đấu, nhưng có vẻ như một người tham gia duy nhất chỉ có thể thuộc về một giải đấu nào. Bạn có thể cần đưa thứ gì đó vào truy vấn con để kiểm tra điều này.

+0

Xin chào, Cảm ơn bạn đã trả lời sâu sắc. Tôi phải cho bạn biết rằng tôi là một người mới bắt đầu và tất cả điều này là thử và sai cho tôi. Tôi đang sử dụng một chương trình để giúp tôi xác định lỗi trên mã của mình, nhưng cho đến nay tôi không thể làm cho tập lệnh của tôi chạy với các thay đổi được đề xuất của bạn. Tôi phải nhập sai. Nó sẽ không cho phép tôi đăng lại mã của mình ở đây. Tôi chỉ còn 240 ký tự ... Tôi sẽ đặt nó vào một câu trả lời bên dưới. Cảm ơn! – Tom

+0

Ngoài ra tôi muốn lưu ý rằng những người tham gia có thể là thành viên của nhiều giải đấu. Vì vậy, chúng tôi có thể phải cố gắng đưa vào một số mã để chỉ chọn những người tham gia là một phần của giải đấu này. - Tôi có thể xây dựng kịch bản đó nếu bạn có thể cho tôi một chân với nó. Cảm ơn bạn lần nữa !! – Tom

Các vấn đề liên quan