点赞功能:从数据库设计到Web端实现分析

ASP新手入门

点赞功能需求:用户能点赞,能取消赞,同时能查看赞了该条状态的所有人,可能还需要提醒发该条状态的人谁谁谁赞了你。

web端实现:显示点赞数,当有用户赞了该状态,则点赞数+1等。

本文从点赞功能的数据库设计说起,一步步到各个功能的基本实现方法。


数据库设计

首先是2张表,t_user表与t_tatus表,分别表示用户表与状态表。Ps:这个点赞功能是需要登录的。(如果是不需要登录就能点赞,最好还需要多个字段或新表来记录用户IP,防止重复点赞)

那么关键是点赞功能怎么在数据库中表现出来。


刚开始我觉得直接在t_tatus表中加一个like字段,当有用户点了赞,直接拼个user_id组成的字符串,用逗号隔开, 形如1,2,3,4写入即可。麻烦的是每次写入新的id都要重新拼一次字符串,取消赞也要操作一次字符串,每次取得赞的所有人也要处理字符串,每次计算赞的人数也要拆一次字符串。

当是这种写法也不是没好处,节省空间,不用新表,数据库开销小。无非计算字符串来来回回比较浪费时间。

为了以后查询好处理一点,我的实现还是新建了一张t_like表(有新方案的小伙伴可以评论留言讨论),结构如下。


表t_user结构:


CREATE TABLE `t_user` ( `userID` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) NOT NULL UNIQUE, `nickname` varchar(255) DEFAULT NULL , `pwd` varchar(255) NOT NULL , `phoneno` varchar(64) DEFAULT NULL , PRIMARY KEY (`userID`) )

表t_tatus结构:

CREATE TABLE `t_tatus` ( `statusID` int(11) NOT NULL AUTO_INCREMENT, `userID` int(11) NOT NULL , `statusContent` varchar(255) NULL DEFAULT NULL , PRIMARY KEY (`statusID`) )

表t_like结构:(双主键)

CREATE TABLE `t_like` ( `statusID` int(11) NOT NULL , `userID` int(11) NOT NULL , `createTime` varchar(45) NULL DEFAULT NULL , PRIMARY KEY (`statusID`,`userID`) )

服务器端 服务器端主要做的就是点赞时在t_like表中插入一条数据,取消赞时找到t_like表中的对应数据删除,很easy。PS:可能还需要统计赞的个数并返回,sql语句count()一下。 文件名like.php

require_once('common.php'); //http:localhost/like.php?userID=1&statusID=1&getMethod=web&do=auto $userID = $_GET['userID']; $statusID = $_GET['statusID']; $getMethod = $_GET['getMethod']; //请求方式, 如果是web, 则返回地址 $do = $_GET['do']; //like 或者 unlike 或者 auto(自动判断) if (!isset($userID) || !isset($statusID)) { return Response::show(401, '参数不合法'); eixt(); } //登录检测 //xxxx try { $connect = Db::getInstance()->connect(); } catch (Exception $e) { return Response::show(403, '数据库连接失败'); } function do_like($connect,$getMethod,$statusID,$userID){ $nowTime = date('Y-m-d H:i:s', time()); $sql = "INSERT INTO t_like(statusID,userID,createTime) VALUES ($statusID,$userID,'$nowTime')"; $result = mysql_query($sql, $connect); if ($result) { if ($getMethod == "web") { echo "Y"; } } else { return Response::show(402, '点赞失败'); } } function do_unlike($connect,$getMethod,$statusID,$userID){ $sql = "delete from t_like where statusID=$statusID and userID=$userID"; $result = mysql_query($sql, $connect); if ($result) { if ($getMethod == "web") { echo "N"; } } else { return Response::show(403, '取消赞失败'); } } if($do == "auto"){ //1.判断是否赞过.赞过->取消赞; 未赞过, 点赞. $sql = "SELECT createTime FROM t_like WHERE statusID=$statusID and userID=$userID"; $query = mysql_query($sql,$connect); if ($query) { if ($rs = mysql_fetch_array($query)) { //有值, 表示已经赞 do_unlike($connect,$getMethod,$statusID,$userID); }else { //未赞 do_like($connect,$getMethod,$statusID,$userID); } } else { return Response::show(401, '查询失败'); } }else if ($do == "like") { do_like($connect,$getMethod); } else if ($do == "unlike") { do_unlike($connect,$getMethod,$statusID,$userID); } else { return Response::show(401, '参数不合法'); }

common.php文件中包含了一些封装的返回信息,数据库连接封装。 web端 Ajax实现web端点赞

相关内容推荐

编写第一个ASP程序

现在有很多关于ASP编程的教程。其中有些是对于你有帮助,有些完全没有用。甚至有些写得是误人子弟。无论如何,你读过一些关于ASP的内容,现在你已经准备好构建第一个应用程序。

ASP-条件语句

有时,当我们写代码时,我们要为作出不同的决定而执行不同的操作。我们可以使用条件语句中的代码来做到这一点。条件语句是一套用于执行基于不同条件的不同动作的命令。 为了支

ASP表单输入到HTML

ASP能写.html或者任何其他的直接到web服务器的文档文本(你需要写文本输出到写权限的目录)。这是能够不需要上传PC的文件用户输入即时的发布信息。 下面的例子有四个输入区域(标

asp获取IP地址的函数

FunctionGetIp() DimDulIp,ProIP DulIp=Request.ServerVariables("HTTP_X_FORWARDED_FOR") ProIP=Request.ServerVariables("REMOTE_ADDR") IfDulIp=""Then GetIp=ProIP Else GetIp=DulIp EndIf EndFunction

周的天数

想在asp显示当前一周有多少天吗?这个代码会把握住今天的值和利用到案例选择显示一周的天数。 % date_value = date() %%= date_value %br% dayofweek=weekday(date_value) %day number in week %= dayofweek %br%

返回
顶部