0

我正在使用 MySQL 和 cPANEL 来制作我的网站。我在弄清楚如何制作手动点赞功能(Facebook 点赞按钮或 YouTube 点赞按钮)时遇到问题。

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

视频:

+----+----------+-----------+
| 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

4

3 回答 3

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;

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

于 2013-06-29T18:56:27.967 回答
2

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

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

所以同样减少喜欢

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

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

编辑:

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

表:USER_TO_LIKES

编号 | 用户 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:见上文

于 2013-06-29T19:19:11.520 回答
0

您将需要视频 id 和点击过的用户,以及已经喜欢过类似内容的人的另一个表(称为 Liked_People):

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

现在,用户点击 Like 向那个 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

于 2013-06-30T07:44:31.473 回答