显示0000-9999

时间:2017-01-17 10:05:50

标签: php mysql

我有以下代码

<?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

1 个答案:

答案 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个记录,但是,我并没有真正看到这样做的优势。