Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana memprogram sistem pemungutan suara?

Untuk contoh ini, mari kita asumsikan Anda memberikan suara pada jawaban-jawaban. Ini akan membutuhkan setidaknya tiga tabel:

Pengguna , Jawaban , Suara

Tabel suara akan menyimpan semua sejarah:

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

Dalam contoh ini, kita melihat bahwa dua suara telah dicatat. Pengguna 12 dan 28 sama-sama memilih Jawaban 383. Pengguna 12 menyukainya, dan menambahkan 1 ke dukungannya. Pengguna 28 tidak menyukainya, dan mengurangi 1 dari dukungannya.

Setiap kali pengguna memberikan suara, Anda harus terlebih dahulu memeriksa untuk melihat apakah pengguna tersebut telah memberikan suara pada pertanyaan tertentu. Jika sudah, Anda dapat menolak upaya pemungutan suara lebih lanjut, atau menimpa suara lama mereka dengan yang baru.

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

Itu adalah contoh kueri yang sangat sederhana yang akan memberi tahu Anda apakah pengguna telah memilih atau belum. Jika itu mengembalikan catatan, Anda tahu mereka telah memilih. Anda dapat menanggapi dengan sangat baik "Maaf, Anda telah memilih." pesan, atau Anda dapat menimpanya:

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

Karena itu, mari kita lihat bagaimana SO menyelesaikan ini:

Saat Anda mengeklik panah suara atas, SO menjalankan permintaan ke url seperti berikut:

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

Di URL ini, kita dapat melihat pemungutan suara dilakukan di pos #1303528. Dan tipe suara diwakili oleh 2. 2 ini kemungkinan mewakili "tambah satu." Anda dapat menggunakan url yang lebih mendasar, dan menggunakan sesuatu seperti:

    vote.php?answerid=383&vote=1

Halaman vote.php akan memiliki kode yang mirip dengan berikut ini:

(peringatan:jangan gunakan kode ini apa adanya. Ini dimaksudkan untuk menjadi contoh, bukan solusi)

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. Mengapa skala database NoSql lebih baik daripada database relasional? Bagaimana saya harus memilih di antara mereka?

  2. Mengintegrasikan MySQL dengan Python di Windows

  3. Bagaimana cara mendapatkan pesan kesalahan yang berarti dari MySQL menggunakan pernyataan yang disiapkan PDO?

  4. Apa cara terbaik untuk membandingkan / menyisipkan / memperbarui produk dalam db MySQL dari file .CSV

  5. Bagaimana saya bisa membuang database MySQL tanpa menggunakan mysqldump dengan Python