2011-07-16 90 views
1

我做了一個search.php,在我的網站上找到文章。我想要做的是創建一個投票系統,將文章分爲多少票。但是這些文章都在一張桌子上,而選票卻在另一張桌子上。所以我需要的是一個外鍵,它會在投票表中告訴文章表多少張表決它會有這樣search.php將相應地排序外鍵幫助!

我的問題是,我將如何設置一個外鍵那會處理? 我只是不知道如何設置文章表和投票表中的外鍵

+0

您目前在文章和投票表中有哪些欄目? – Neil

+0

用戶(這樣用戶每篇文章只能投一次)投票,投票---投票表。文章表有很多行,但是我會給你那些可能有所幫助的--ID,AuthorID,AuthorName,UpVote,DownVote(兩者大約在5分鐘前都添加過) – capernicuzz

回答

1

爲什麼不在插入一行投票表格時更新你的藝術品投票計數?

您可以使用它像

<?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'])."'"); 
+0

我希望用戶每篇文章只能投票一次 – capernicuzz

+0

它與我的答案無關。做3個查詢:SELECT(檢查用戶是否已投票) - >更新(文章表) - >插入(票表) – genesis

+0

有沒有辦法限制用戶ipaddress多次投票?如果有的話,我不需要投票表,並可以使用文章表 – capernicuzz

1

因爲你還沒有告訴我們這些表是我做出的回答假設你有2個表類似於此列:Articles(articleId, someText, ...)Votes(articleId, userId, ...)

然後您將投票中的articleId設置爲外鍵引用article中的articleId。

1

文章

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; 
1

那些不是我會選擇使用的列。

對於選票,您需要知道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)