如何使用MySQL制作手动“喜欢”功能(如facebook)

时间:2013-06-29 18:46:39

标签: php javascript mysql

我正在使用MySQL和cPANEL制作我的网站。我在弄清楚如何制作手动喜欢功能(Facebook喜欢按钮或YouTube竖起大拇指按钮)方面遇到了问题。

我是否会以正确的方式在我的网站上制作“赞”按钮?

VIDEOTABLE:

+----+----------+-----------+
| ID | VIDEO URL| LIKES     |
+----+----------+-----------+
|  1 | example 1| 5774      |
|  2 | example 2| 9654      |
|  3 | example 3| 1254      |
|  4 | example 4| 7656      |
|  5 | example 5| 6757      |
|  6 | example 6| 5675      |
|  7 | example 7| 4565      |
+----+----------+-----------+

ID是我的序列号

VIDEO_URL是我的页面链接或视频链接

likes是喜欢此内容的用户

因此,想要在没有登录时点击“赞”按钮的同时观看视频,它将重定向并显示登录面板。然后,用户将通过FACEBOOK或TWITTER登录,以便网站获得USER_ID

如果用户登录,那么他们会选择他们的代码(不确定)

    SQL> UPDATE VIDEOTABLE
    SET ID = '3', LIKES = ????;

如何在表格中增加+1值?然后,当用户喜欢它时,网站会刷新并显示最新值(通过增加+1)。

我的第二个问题=我如何通过只提供一次机会来限制用户)并撤消Rollback Query

3 个答案:

答案 0 :(得分:3)

您应该可以使用以下内容:

UPDATE VIDEOTABLE SET LIKES=LIKES+1 WHERE ID=3;

但是,设置一个单独的查找表可能是明智之举,该表可以指示某个特定用户是否已经“喜欢”了某些内容,这样他们可能不会多次“喜欢”它。

那张桌子看起来像这样:

tblLikesLookup

+----+--------+--------+
| ID | videoID| userID |
+----+--------+--------+
|  1 | 1      | 10     |
|  2 | 3      | 7      |
|  3 | 2      | 10     |
|  4 | 8      | 8      |
|  5 | 6      | 8      |
+----+--------+--------+

您甚至可以使用此表代替您的VIDEOTABLE来存储您的喜欢。要获得任何给定视频的喜欢数量,

SELECT COUNT(*) FROM tblLikesLookup WHERE videoID=[videoID];

或所有视频,

SELECT COUNT(*) FROM tblLikesLookup GROUP BY videoID;

随着您网站的音量增加,这可能最终会变慢,在这种情况下,使用像您上面那样的单独计数器会派上用场。

答案 1 :(得分:2)

如果我理解你的话, 你可以简单地增加任何数字:

update VIDEOTABLE set LIKES = LIKES + 1 where ID = ...

同样减少喜欢

update VIDEOTABLE set LIKES = LIKES - 1 where ID = ...

用户ID是什么并不重要。您需要视频ID

编辑:

如果你想防止多个喜欢,你也需要一个新表。

表:USER_TO_LIKES

id | user_id | VIDEO_ID

所以你必须先检查用户是否喜欢它:

$c = mysql_num_rows(mysql_query("select id from USER_TO_LIKES where video_id = 11 and user_id = XX"));
if($c == 0){
 mysql_query("update VIDEOTABLE set LIKES = LIKES + 1 where ID = 11 ");
mysql_query("insert into USER_TO_LIKES set video_id = 11, user_id = XX");
}

如果不同:

$c = mysql_num_rows(mysql_query("select id from USER_TO_LIKES where video_id = 11 and user_id = xx"));
if($c > 0)
{
 mysql_query("update VIDEOTABLE set LIKES = LIKES - 1 where ID = 11");
mysql_query("delete from USER_TO_LIKES where video_id = 11 and user_id = XX"); 
}

就是这样。

EDIT2:见上文

答案 2 :(得分:0)

你需要视频ID和已点击的用户和另一张桌子(被称为Liked_People)已经有人喜欢这样的人:

+-------+---------+
|UserId |VideoId  |
+-------+---------+
|1      |5739     |
+-------+---------+

现在用户点击就像向该PHP函数发送XMLHTTP请求:

function Like($usrid , $vidid){
//usrid = userid And vidid = video id
$Comm1 = $Con->prepare("SELECT * FROM Liked_People WHERE UserId = ? And VideoId = ?");
$Comm1->execute(Array($usrid , $vidid);
if($Comm1->rowCount() == 0){
$Comm2 = $Con->prepare("INSERT INTO Liked_People (UserId , VideoId) VALUES (?,?)");
$Comm2->execute(Array($usrid , $vidid));
$Comm3 = $Con->prepare("SELECT Likes FROM VideoTable WHERE Id = ?");
$result = $Comm3->Execute(Array($vidid));
$final = $result + 1;
$Comm4 = $Con->prepare("UPDATE VideoTable SET Likes=? WHERE ID = ?");
$Comm4->Execute(Array($final , $vidid));
}else { return false;}
}

而且如果你想得到一个喜欢的用户名列表,那就说你有这样的人员表:

+-------+--------------+
|Id     |Username      |
+-------+--------------+
|1      |Ahmad Mehmet  |
+-------+--------------+

这就是守则:

function get_likers($vidid){
if($vidid == null or $vidid == "" or $vidid == 0){
return false;
}
$Comm1 = $Con->prepare(SELECT UserId FROM Liked_People WHERE VideoId = ?);
$Comm1->Execute(Array($vidid));
$arr = $Comm1->fetchAll();
$finale = Array();
$i = 0;
foreach($arr as $row){
$Comm = $Con->Prepare("SElECT Username WHERE Id = ?");
$finale[$i] = $Conm->Execute(Array($row[0]));
$i++;
}
return $finale
}

此功能仅用于备份,不是必需的。

function Work_Array($Arr){
echo '<table border="2">';
echo '<tr><th>Users That Has Liked</th></tr>';
foreach($Arr as $el){
echo"<tr><td>";
echo $el;
echo "</td></tr>";
}
echo "</table>";
}

叫那样:

work_array(get_likers($vidid));

问题:d