所以我想创建一个视图计数器,我的表看起来像这样。
post_id | view_count | view_ip
----------------------------------
20 | 1 | some ip
21 | 1 | some ip
此时我迷失了,我知道这样做是错的,但我不知道怎么做。
所以目前我用count(post_id)调用视图,它给了我1但是当我用手机打开网站时(不是在wifi上)我希望第二行有post_id = 20但重复激活,我没有制作新插页...
这是我的问题:
INSERT IGNORE INTO `views`
SET view_count=1, post_id = '.$article['post_id'].', view_ip = "'.$ip.'"
ON DUPLICATE KEY UPDATE view_count=view_count;
在堆栈的某个地方有一个答案如何跳过更新,这是推荐的,但我不确定这是否正常...
P.S .: 我的想法是每个ip都有一个视图。
答案 0 :(得分:0)
从语义上讲,您尝试表达"为此帖子插入新视图,但如果已有视图,请添加一个"。
这可以通过以下方式完成:
(post_id, view_ip)
您需要在DUPLICATE KEY
上使用uniq索引才能发生view_ip = ?
。
哦,拜托,请不要连接字符串以伪造SQL查询,这是SQL Injections的方法。请使用预准备语句,准备好的语句提供非常干净(在视觉上和技术上)的方式来将值放在语句中,并且它在服务器端非常安全地进行。
当我说它"视觉上清洁"我的意思是我更喜欢:
view_ip = "'.$ip.'"
在:
?
另外,第二个很容易进行SQL注入。
(<div class="main-content">
<!-- page content -->
<div id="page-wrapper">
<div class="tab-pane active" id="horizontal-form">
<h3 class="blank1">Vehicle Details</h3>
{!! Form::open(array('class' => 'form-horizontal','route' =>
'vehicles.store','method'=>'POST')) !!}
<script type="text/javascript">
$('#cp2').colorpicker();
</script>
<div class="row">
<div id="cp2" class="input-group colorpicker-component">
<input type="text" value="#00AABB" class="colorpicker form-control" />
<span class="input-group-addon"><i></i></span>
</div>
<div class="row">
<div class="form-group">
<div class="col-md-6">
<div class="col-xs-12 col-sm-12 col-md-12 text-center">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</div>
</div>
{{ Form::close() }}
</div>
</div>
</div>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js">
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-
colorpicker/2.5.1/js/bootstrap-colorpicker.min.js"></script>
占位符可能因系统而异。