基本上我不想在某些字段中重复数字。我该怎么做?
table user:
id name group
1 a 2
2 b 3
3 c 1
4 d 6
5 e 5
$q = $db->query("SELECT COUNT(t_group) FROM user");
$r = $q->fetch_row;
if($r[0] > 0) :
$rand_no = rand(1,10);
$db->query("INSERT INTO user(name, group) VALUES('$name','$rand_no')");
endif;
答案 0 :(得分:3)
使用insert ... where not exists
示例代码
//prevent those pesky SQL injection attacks
$rand_no = mysql_real_escape_string($rand_no);
$name = mysql_real_escape_string($name);
//Only insert if group is not already used
$db->query("insert into user(name, `group`)
VALUES('$name',$rand_no)
where not exists
(select `group` from user where `group` = '$rand_no') )";
我添加了前两行,提醒你不要忘记逃避这些值以防止SQL注入攻击。 (如果$rand_no
是由php代码生成的,当然不需要转义它,但如果用户可以操作它,那么你应该
其次group
是一个保留字,如果你想在查询中使用它,你需要将它括在反引号'''中。
修改强>
在数据库中强制执行
使用group
ALTER TABLE
设置为唯一字段
ALTER TABLE CHANGE COLUMN `group` `group` UNIQUE
答案 1 :(得分:1)
<强> PHP 强>
var stop_cycle = 0;
while (!stop_cycle) {
$rand_no = rand(1,10);
$db->query("SELECT group FROM user WHERE group = ".$rand_no);
// check if query returns any result
if(mysql_affected_rows() == 0) {
// value is unique, let's insert it
$db->query("INSERT INTO user(name, group) VALUES('$name','$rand_no')");
// end cycle
stop_cycle=1;
}
}
答案 2 :(得分:0)
您需要生成一个随机数,然后查看该字段中是否已存在具有该数字的记录。假设你的随机数是8
select top 1 group from user where group=8
如果有任何行返回,则该数字不是唯一的。