我制作了一个search.php,可以在我的网站上找到文章。我试图做的是建立一个投票系统,根据投票数量对文章进行排序。但这些文章在一个表格中,而投票在另一个表格中。所以我需要的是一个外键,它将在投票表中告诉文章表它有多少票,所以search.php会相应地排序
我的问题是,我如何设置一个可以处理的外键? 我只是不知道如何在文章表和投票表中设置外键
答案 0 :(得分:1)
为什么不在向投票表中插入一行时更新您的artices的投票数?
您可以像
一样使用它<?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'])."'");
答案 1 :(得分:1)
由于您没有告诉我们这些表格是什么,我假设您有2个表格,其中包含与此类似的列:Articles(articleId, someText, ...)
和Votes(articleId, userId, ...)
然后,您将投票中的articleId设置为引用文章中articleId的外键。
答案 2 :(得分: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脚本中创建一个外键限制:
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;
答案 3 :(得分:1)
这些不是我选择使用的列。
对于投票,您需要知道a)哪个用户c)哪个用户c)他们是投票还是投票。所以我会有一个ArticleID(这是你的Article表的外键),UserID和Vote,它们可以是1或-1。然后SELECT ArticleID, SUM(Vote) AS TotalVote FROM Votes GROUP BY ArticleID
会告诉您每篇文章的总投票数,如果您愿意,可以进行排序。
但是既然你也在搜索文章,你会想要使用你的ArticleID从你的文章表到你的投票表进行左连接。请注意,在这种情况下,SUM(Vote)
如果您的文章尚未投票,则NULL
将为IFNULL(SUM(Vote), 0)
,因此您可能需要使用{{1}}。