我正在使用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
。
答案 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
所以你必须先检查用户是否喜欢它:
$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