我做了一個search.php,在我的網站上找到文章。我想要做的是創建一個投票系統,將文章分爲多少票。但是這些文章都在一張桌子上,而選票卻在另一張桌子上。所以我需要的是一個外鍵,它會在投票表中告訴文章表多少張表決它會有這樣search.php將相應地排序外鍵幫助!
我的問題是,我將如何設置一個外鍵那會處理? 我只是不知道如何設置文章表和投票表中的外鍵
我做了一個search.php,在我的網站上找到文章。我想要做的是創建一個投票系統,將文章分爲多少票。但是這些文章都在一張桌子上,而選票卻在另一張桌子上。所以我需要的是一個外鍵,它會在投票表中告訴文章表多少張表決它會有這樣search.php將相應地排序外鍵幫助!
我的問題是,我將如何設置一個外鍵那會處理? 我只是不知道如何設置文章表和投票表中的外鍵
爲什麼不在插入一行投票表格時更新你的藝術品投票計數?
您可以使用它像
<?php
//vote.php
require 'db.php';
if (mysql_num_rows(mysql_query("SELECT id FROM votes WHERE article_id = '".intval($_GET['aid'])."' AND ip = '".$_SERVER['REMOTE_ADDR']."'")) {
die("Already voted");
}
mysql_query("INSERT INTO votes (id, ip, article_id) VALUES ('', '".$_SERVER['REMOTE_ADDR']."', '".$_GET['aid']."')");
mysql_query("UPDATE articles SET votes = votes ".($_GET['vote'] == "up" ? "+ 1" : "- 1")." WHERE article = '".intval($_GET['aid'])."'");
我希望用戶每篇文章只能投票一次 – capernicuzz
它與我的答案無關。做3個查詢:SELECT(檢查用戶是否已投票) - >更新(文章表) - >插入(票表) – genesis
有沒有辦法限制用戶ipaddress多次投票?如果有的話,我不需要投票表,並可以使用文章表 – capernicuzz
因爲你還沒有告訴我們這些表是我做出的回答假設你有2個表類似於此列:Articles(articleId, someText, ...)
和Votes(articleId, userId, ...)
然後您將投票中的articleId設置爲外鍵引用article中的articleId。
表文章
ID SUBJECT CONTENT DATE_ADDED
-----------------------------------------------
1 | How to vote | text... | 14-07-2011 14:11:23
2 | Rate me | text... | 16-07-2011 09:04:56
表投票
ID ARTICLE_ID VOTE IP DATE_ADDED
-----------------------------------------------
1 | 1 | 3 | 184.153.2.62 | 14-07-2011 15:02:23
2 | 1 | 1 | 211.182.31.74 | 14-07-2011 16:11:51
如果您在表中設置了像上面(或類似),你可以在你的MySQL腳本創建一個外鍵約束as:
CREATE TABLE articles (id INT NOT NULL,
subject VARCHAR(255),
content TEXT,
date_added DATETIME,
PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE votes (id INT,
article_id INT,
vote TINYINT,
ip VARCHAR(15),
date_added DATETIME,
FOREIGN KEY (article_id) REFERENCES articles(id)
ON DELETE CASCADE
) ENGINE=INNODB;
那些不是我會選擇使用的列。
對於選票,您需要知道a)哪篇文章b)哪個用戶c)他們是否投了票。因此,我將擁有ArticleID(這是您的文章表的外鍵),UserID和Vote,它們可以是1或-1。然後SELECT ArticleID, SUM(Vote) AS TotalVote FROM Votes GROUP BY ArticleID
會告訴你每篇文章的總投票數,如果你願意,你可以排序。
但是由於您也在搜索文章,因此您希望使用您的ArticleID從文章表格到您的投票表格進行左連接。請注意,在這種情況下,如果您的文章尚未投票,SUM(Vote)
將爲NULL
,因此您可能需要使用IFNULL(SUM(Vote), 0)
。
您目前在文章和投票表中有哪些欄目? – Neil
用戶(這樣用戶每篇文章只能投一次)投票,投票---投票表。文章表有很多行,但是我會給你那些可能有所幫助的--ID,AuthorID,AuthorName,UpVote,DownVote(兩者大約在5分鐘前都添加過) – capernicuzz