我在MySQL中有一个表。此表的名称为questiontbl
。问题存储在这个表中。向用户随机显示一个问题。这个问题不应重复。因此用户ID存储在名为uid
的列中。我有一些问题:
第一,问题显示多次而不是一次。
第二,uid
字段更新不能正常工作。例如,如果用户ID是40,并且必须添加到字段中一次,则会添加三次。
请审查我的代码,并帮助我解决它的问题。
我的桌子:
注意:用户ID不应重复存储在uid
列中。
我的代码:
<?php
$uid2=$_SESSION['id'];
$get1 = "SELECT * FROM questiontbl ORDER BY RAND() LIMIT 1";
$get2=mysqli_query($conn,$get1);
$get3=mysqli_fetch_assoc($get2);
$questionid=$get3['id'];
$now=$get3['uid'];
$now2=explode(',',$now);
foreach ($now2 as $data)
{
if (strpos($data,$uid2) !== FALSE )
{
header("Location: startnew.php");
}
else
{
$final_show=$get3['questiontitle'];
echo $final_show;
$update_idq = "UPDATE questiontbl SET uid=concat(uid,'$uid2,') WHERE id='$questionid' LIMIT1";
mysqli_query($conn, $update_idq);
}
}
?>
您会得到重复,因为您正在迭代UID
列中的所有值,以查看是否与会话ID
值匹配,每次值不匹配时,您都在更新表。相反,在explorde
ing值之后,使用in_array
查看会话id
值是否存在于uid
列中:
$uid2=$_SESSION['id'];
$get1 = "SELECT * FROM questiontbl ORDER BY RAND() LIMIT 1";
$get2=mysqli_query($conn,$get1);
$get3=mysqli_fetch_assoc($get2);
$questionid=$get3['id'];
$now=$get3['uid'];
$now2=explode(',',$now);
if (in_array($uid2, $now2)) {
header("Location: startnew.php");
}
else {
$final_show=$get3['questiontitle'];
echo $final_show;
$update_idq = "UPDATE questiontbl SET uid=concat(uid,",$uid2") WHERE id='$questionid' LIMIT 1";
mysqli_query($conn, $update_idq);
}
还请注意,变量替换只发生在双引号字符串中(您需要在id
值前加上逗号),因此需要更改
SET uid=concat(uid,'$uid2,')
至
SET uid=concat(uid,",$uid2")
最后,您有一个输入错误,limit1
应该是limit1
,尽管该查询应该不需要它。