Php 如果表单中签入了一个或多个项目,如何将MySQL字段增加一个?
我有一个页面,用户可以投票选择哪个游戏平台(例如)是最好的。在MySQL中,我有一个这些项目的表。我想更新“计数”字段,并在每次选中指定项时将其设置为+1。 提交表单后,我将获得一个选定项目的数组:Php 如果表单中签入了一个或多个项目,如何将MySQL字段增加一个?,php,mysql,laravel,Php,Mysql,Laravel,我有一个页面,用户可以投票选择哪个游戏平台(例如)是最好的。在MySQL中,我有一个这些项目的表。我想更新“计数”字段,并在每次选中指定项时将其设置为+1。 提交表单后,我将获得一个选定项目的数组: array [ 0 => "XBOX" 1 => "PS4" 2 => "PC" ] 现在,我想将这个数组与MySQL字段进行检查和比较,并将它们的计数值增加1。 我试图用这个来比较数组和MySQL,但没有成功 $value = Input::get('platfor
array [
0 => "XBOX"
1 => "PS4"
2 => "PC"
]
现在,我想将这个数组与MySQL字段进行检查和比较,并将它们的计数值增加1。
我试图用这个来比较数组和MySQL,但没有成功
$value = Input::get('platform'); //this produces presented array
$test = Platform::where('name', 'LIKE', implode(" ", $value))->get();
我认为你应该使用
where
而不是where
$test = Platform::whereIn('name', $value)->get();
更新:
您可以通过DB::raw()实现这一点:
我不熟悉您的查询生成器,但在SQL中,您只需执行以下操作:
updatetable_name SET counter=(counter+1),其中name位于('XBOX','PS4',PC')代码>
其中,table\u name
是您的表名,counter
是跟踪计数的字段名
这将使每个匹配的平台增加1。现在可以工作了。如果有人需要代码示例,请看这里。谢谢你们
public function vote()
{
$value= Input::get('platform');
$test = Platform::whereIn('name', $value)->get();
for ($i = 0; $i < count($test); $i++) {
$test[$i]->count += 1;
$test[$i]->save();
}
}
公共功能投票()
{
$value=Input::get('platform');
$test=Platform::其中('name',$value)->get();
对于($i=0;$icount+=1;
$test[$i]->save();
}
}
您应该在
中使用,而不是像
那样使用。基本上有两个原因1)您似乎没有实际执行生成的查询,2)查询无效。您应该使用IN(),我已将其更改为IN,并使用dd($test)
进行了检查,但它显示了一个空数组。您使用的是where吗?还是空的?我想你需要使用foreach循环,它就像一个符咒。可以使用DB::raw()吗?我说的“ok”是指它比使用Laravel查询生成器更安全、更高效吗?或者没有区别…?@harunB10 DB::raw()是Laravel查询生成器的方法…所以你不能比较两个相同的东西。。。您可以比较的是雄辩和查询生成器。。。。。您的方法是使用雄辩的,而上面的是查询生成器。。。查询生成器比雄辩的更高效。这是比较的链接。。。我想回到这个问题上来。我在使用此代码递增字段值时遇到问题。一开始它工作得很好。但随着时间的推移,它会犯错误。。。在MySQL中,我存储了一些值,显示哪个用户投票给哪个项目。。。当我进行查询时:从'users'中选择COUNT(*),其中vote='PC'
。。这里我得到了值115,但在“平台”表中,我的列计数显示了121(投票)。如果用户同时投票,情况会是这样吗?是线程问题还是其他问题?@harunB10这种差异是否一直存在?随着用户数量的增加,这种差异也在增加。我在这里找到了一些东西——在@Anthony Rutledge的答案上。也许是因为它的类型。现在我把它改成了InnoDB(以前是MyISAM)。现在它运行得很好。干得好。。更新了我的答案,在Laravel做了同样的事情
public function vote()
{
$value= Input::get('platform');
$test = Platform::whereIn('name', $value)->get();
for ($i = 0; $i < count($test); $i++) {
$test[$i]->count += 1;
$test[$i]->save();
}
}