我有以下代码
<?php
if(isset($_POST['add_site'])){
$req_fields = array('siteid');
validate_fields($req_fields);
if(empty($errors)){
$p_siteid = remove_junk($db->escape($_POST['siteid']));
$query = "INSERT INTO site_table (siteid)";
$query .=" VALUES ("'{$p_siteid}')";
if($db->query($query)){
$session->msg('s',"Site Added ");
redirect('site.php', false);
} else {
$session->msg('d',' Sorry failed to add!');
redirect('site.php', false);
}
} else{
$session->msg("d", $errors);
redirect('site.php',false);
}
}
?>
但我想添加一个功能,它将检查我的表格并仅显示我可以选择/使用的前5个可能的数字,这些数字在我的表值上不存在。
或
自动预选同一范围0000-9999中的值,该值在打开表格时我的表值尚不存在。
我的表格div如下所示..
<div class="row">
<div class="col-md-12">
<form method="post" action="add_site.php">
<div class="form-group">
<div class="input-group">
<span class="input-group-addon">
<i class="glyphicon glyphicon-picture"></i>
</span>
<input type="text" class="form-control" name="siteid" placeholder="Site Number">
</div>
</div>
<div class="form-group clearfix">
<button type="submit" name="add_site" class="btn btn-primary">Add Site</button>
</div>
</form>
</div>
</div>
所以如果我的表已经有
的值id siteid
1 0000
2 0001
3 0004
4 1000
5 2000
6 5555
7 0006
8 0010
所以,我只能选择
的前5个值0002
0003
0005
0007
0008
它尚未存在于我现有的表格值中,并在我的div表格中显示以供选择。
或
在打开对话框表单时预先选择值0002
。
答案 0 :(得分:0)
最简单的解决方案是有一个帮助表,列出所有可能的值或列出0到9之间的数字,然后通过3个自联接组合数字以创建范围。原因是sql无法创建不存在的东西。
如果在名为siteid的字段中有一个包含0000 - 9999中所有可能数字的帮助器表,则使用左连接:
select ht.siteid
from helper_table ht
left join site_table st on st.siteid=ht.siteid
where st.siteid is null
order by ht.siteid asc
limit 5
如果辅助表仅包含数字0 - 9,则在它们之间创建一个笛卡尔连接,并在笛卡尔连接的结果上进行左连接:
select concat(ht1.siteid, ht2.siteid, ht3.siteid, ht4.siteid) as siteid
from (helper_table ht1 join helper_table ht2 join helper_table ht3 join helper_table ht4)
left join site_table st on st.siteid=concat(ht1.siteid, ht2.siteid, ht3.siteid, ht4.siteid)
where st.siteid is null
order by concat(ht1.siteid, ht2.siteid, ht3.siteid, ht4.siteid) asc
limit 5
如果你真的坚持没有辅助表,你可以使用联合动态创建0到9个记录,但是,我并没有真正看到这样做的优势。