2012-04-05 35 views
16

Tôi đang tìm cách triển khai một điều tương tự với huy hiệu stackoverflow. bạn cũng có thể đánh giá chúng thành những thành tựu trong trò chơi.huy hiệu/thành tích

nhưng không chắc chắn cách thiết kế cơ sở dữ liệu/mã/theo dõi cho chúng.

tôi nhận được những gì tôi nên làm gì cho phù hiệu như:

vị tha × 1456 bounty Trước tiên, bạn bằng tay trao về câu hỏi của người khác

vì họ là một sự kiện một thời gian, nhưng làm thế nào để xử lý khác như:

× Analytical 16.389 Visited mỗi phần của FAQ
cử tri × 1783 bình chọn trên 600 câu hỏi và 25% trở lên tổng số phiếu biểu là về các vấn đề Thẳng thắn × 188 Bài viết 10 tin nhắn trong cuộc trò chuyện đã được đóng vai chính bởi 10 người dùng khác nhau

vv ...

làm thế nào để xử lý, làm thế nào để giữ theo dõi tiến độ cho mỗi, v.v ... là có một hướng dẫn hoặc một cái gì đó có thể giúp tôi tìm ra một mẫu thiết kế cho họ?

Trả lời

17

Đối với các ví dụ cụ thể, về cơ bản có hai cơ chế bạn cần.

Tôi không biết làm thế nào nó được thực hiện trên SO, đây chỉ là một gợi ý của một giải pháp.

Trước hết hãy xem 'Phân tích'. Bạn sẽ phải ghi lại bằng một lá cờ đơn giản khi người dùng ghé thăm một khu vực cụ thể trong Câu hỏi thường gặp. Hãy xem xét một bảng DB với một trường cho mỗi phần FAQ và một ID người dùng. Điều này bắt đầu là "N" (hoặc 0, hoặc tuy nhiên bạn muốn đại diện cho lá cờ của bạn). Khi người dùng truy cập khu vực đó, bạn gọi mã để lật trường đó thành "Y". Khi tất cả các trường là "Y" thì bạn có thể trao huy hiệu đó.

Đối với 'electorate' và 'Outspoken', bạn có thể truy xuất thông tin này bằng truy vấn trên dữ liệu hiện có của bạn, giả sử truy vấn chúng không quá nặng nề. Bạn sẽ cần phải xem xét khi nào để chạy các kiểm tra này. Điều này về cơ bản nắm xuống hai lựa chọn.

1) Khi một hành động được thực hiện mà có thể được trao một huy hiệu (tức là lần phần của FAQ, Vote trên câu hỏi, câu hỏi đóng vai chính bởi người khác)

2) Định kỳ (hàng giờ, hàng ngày, vv) chạy kiểm tra tất cả các huy hiệu của bạn dựa vào dữ liệu hiện tại.

Hãy nhớ rằng huy hiệu là một chiều trong Stackoverflow, vì vậy nếu bạn muốn tương đương thì bạn không phải xem xét logic để phù hiệu 'chưa được trao giải'.

+0

tôi nghĩ rằng tôi nhận được nó ngay bây giờ. có vẻ dễ dàng: P chỉ là một vấn đề - bạn nói cho 'phân tích' để sử dụng một bảng db, nhưng sẽ có nhiều huy hiệu tương tự như vậy và làm thế nào tôi sẽ đi về cho mỗi người trong số họ? tôi nên sử dụng một bảng khác nhau cho mỗi huy hiệu, hoặc là có một số cách để thống nhất điều này thành một bảng duy nhất? nếu không tôi có thể kết thúc với rất nhiều bảng db, một cho mỗi loại huy hiệu ... nhưng thnx cho câu trả lời - nó giúp rất nhiều để giúp tôi bắt đầu đi đúng hướng. btw, 2 của bạn có nghĩa là huy hiệu không được trao vào đúng thời điểm họ đạt được, đúng không? và có, sẽ không có giải thưởng. – b0x0rz

+1

Cách bạn triển khai bảng tùy thuộc vào bạn.Bạn có thể có bảng 4 cột với user_id, badge_id, badge_acheivement_id, flag - Điều này sẽ làm cho bảng có thể mở rộng thành nhiều huy hiệu. Và, vâng, điều đó có nghĩa là họ không được trao tặng ngay khoảnh khắc họ đã đạt được. –

+0

tất nhiên :) cảm ơn bạn. tôi nghĩ rằng điều này giải quyết tất cả các vấn đề của tôi. tôi đoán kiểm tra lịch trình khá thường xuyên là khả năng giảm khoảng cách thời gian giữa 'kiếm' huy hiệu và huy hiệu được hiển thị. – b0x0rz

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