इस उदाहरण के लिए, मान लें कि आप इतने उत्तरों पर मतदान कर रहे हैं। इसके लिए कम से कम तीन तालिकाओं की आवश्यकता होगी:
उपयोगकर्ता , उत्तर , वोट
वोट टेबल में होगा पूरा इतिहास:
voteid | userid | answerid | value
----------------------------------
1 | 12 | 383 | 1
2 | 28 | 383 | -1 (negative number would require signed values)
इस उदाहरण में, हम देखते हैं कि दो वोट दर्ज किए गए हैं। उपयोगकर्ता 12 और 28 दोनों ने उत्तर 383 पर मतदान किया। उपयोगकर्ता 12 ने इसे पसंद किया, और इसके समर्थन में 1 जोड़ा। उपयोगकर्ता 28 को यह पसंद नहीं आया, और इसके समर्थन से 1 घटा दिया।
जब भी कोई उपयोगकर्ता वोट करता है, तो आपको पहले यह देखना चाहिए कि क्या उस उपयोगकर्ता ने उस विशेष प्रश्न पर पहले ही वोट कर दिया है। यदि उनके पास है, तो आप वोट करने के किसी भी अन्य प्रयास को अस्वीकार कर सकते हैं, या उनके पुराने वोट को एक नए के साथ अधिलेखित कर सकते हैं।
SELECT *
FROM votes
WHERE (userid = 12)
AND (answerid = 383)
यह एक बहुत ही सरल उदाहरण क्वेरी है जो आपको बताएगी कि उपयोगकर्ता ने पहले ही मतदान कर दिया है या नहीं। यदि यह रिकॉर्ड लौटाता है, तो आप जानते हैं कि उन्होंने मतदान किया है। आप बहुत अच्छे से जवाब दे सकते हैं "क्षमा करें, आप पहले ही मतदान कर चुके हैं।" संदेश, या आप इसे अधिलेखित कर सकते हैं:
UPDATE votes
SET value = $votevalue
WHERE (userid = 12)
AND (answerid = 383)
ऐसा कहने के बाद, आइए देखें कि SO इसे कैसे पूरा करता है:
जब आप अप-वोट तीर पर क्लिक करते हैं, तो SO निम्न की तरह एक url पर एक अनुरोध को सक्रिय करता है:
http://stackoverflow.com/posts/1303528/vote/2
इस यूआरएल में, हम देख सकते हैं कि पोस्ट #1303528 पर वोट डाला जा रहा है। और वोट-प्रकार को 2 द्वारा दर्शाया जाता है। यह 2 संभावित रूप से "एक जोड़ें" का प्रतिनिधित्व करता है। आप अधिक बुनियादी url का उपयोग कर सकते हैं, और कुछ इस तरह से जा सकते हैं:
vote.php?answerid=383&vote=1
वोट.php पेज का कोड निम्न के जैसा होगा:
(चेतावनी:इस कोड का इस तरह उपयोग न करें। यह एक उदाहरण के लिए है, समाधान के लिए नहीं)
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.";
}
}
}