Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để lập trình một hệ thống bỏ phiếu?

Đối với ví dụ này, giả sử bạn đang bỏ phiếu cho các câu trả lời như vậy. Điều này sẽ yêu cầu ít nhất ba bảng:

Người dùng , Câu trả lời , Phiếu bầu

Bảng bình chọn sẽ lưu giữ tất cả lịch sử:

voteid | userid | answerid | value
----------------------------------
   1   |   12   |   383    |   1
   2   |   28   |   383    |  -1  (negative number would require signed values)

Trong ví dụ này, chúng ta thấy rằng hai phiếu bầu đã được ghi lại. Người dùng 12 và 28 đều bỏ phiếu cho Câu trả lời 383. Người dùng 12 yêu thích nó và thêm 1 vào hỗ trợ của nó. Người dùng 28 không thích nó và đã trừ đi 1 khoản hỗ trợ.

Bất cứ khi nào người dùng bỏ phiếu, trước tiên bạn nên kiểm tra xem người dùng đó đã bỏ phiếu cho câu hỏi cụ thể đó chưa. Nếu họ có, bạn có thể từ chối bất kỳ nỗ lực bỏ phiếu nào khác hoặc ghi đè phiếu bầu cũ của họ bằng một phiếu bầu mới.

SELECT * 
FROM votes 
WHERE (userid = 12) 
  AND (answerid = 383)

Đó là một truy vấn ví dụ rất đơn giản sẽ cho bạn biết liệu người dùng đã bỏ phiếu hay chưa. Nếu nó trả về hồ sơ, bạn biết họ đã bỏ phiếu. Bạn có thể trả lời rất hay "Xin lỗi, bạn đã bỏ phiếu rồi." hoặc bạn có thể ghi đè nó:

UPDATE votes 
SET value = $votevalue 
WHERE (userid = 12) 
  AND (answerid = 383)

Đã nói rằng, hãy xem cách SO hoàn thành điều này:

Khi bạn nhấp vào mũi tên ủng hộ, SO kích hoạt một yêu cầu tới một url như sau:

    http://stackoverflow.com/posts/1303528/vote/2

Trong URL này, chúng ta có thể thấy phiếu bầu đang được bỏ cho bài đăng số 1303528. Và kiểu biểu quyết được đại diện bằng 2. 2 này có thể đại diện cho "thêm một". Bạn có thể sử dụng một url cơ bản hơn và đi với một cái gì đó như:

    vote.php?answerid=383&vote=1

Trang vote.php sẽ có mã tương tự như sau:

(cảnh báo:không sử dụng nguyên trạng mã này. Nó được coi là một ví dụ, không phải là một giải pháp)

if ($_GET) {

  $userid   = $_SESSION["userid"]; // assumes the user is logged in via SESSIONS
  $answerid = $_GET["answerid"];
  $votetype = $_GET["vote"];

  $query = "SELECT * 
            FROM votes 
            WHERE (userid = {$userid}) 
              AND (answerid = {$answerid})";

  $result = mysql_query($query) or die(mysql_error());

  if (mysql_num_rows($result) > 0) {
    # User has voted
    print "Sorry, you are only allowed one vote.";
  } else {
    # User has not voted, cast the vote
    $query = "INSERT INTO votes (userid, answerid, votevalue)
              VALUES({$userid},{$answerid},{$vote})";
    $result = mysql_query($query) or die(mysql_error());
    if (mysql_affected_rows($result) > 0) {
      print "Your vote has been recorded.";
    }
  }

}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để hiển thị các hàng có số lượng 0 trong nhóm mySQL bằng truy vấn?

  2. gói giao thức không theo thứ tự

  3. Nhóm codeigniter bằng cách tạo mảng đa chiều

  4. Tất cả các cột đang được đặt thành cùng một giá trị

  5. Tôi không thể sử dụng bí danh trong xóa sql