我有两个数据表,如下所示。
表1:
--------------------
sbstart sbend totsb
--------------------
200 205 6
表2:
chkNo
------
201
203
我有一个动态创建的下拉框,其中包含表1信息,这是200到205之间的所有响应。换句话说,下拉列表有200,201,202 ... 205。我现在需要的是在创建下拉框后排除表2中的数字。例如,当显示时,下拉列表应该只有200,2004和2005。
以下是我根据表1获取开始和结束编号之间所有响应的代码。有人可以告诉我如何在创建下拉列表时排除表2的数字。感谢。
$con=mysql_connect('localhost','root') or die ("Server connection failure!");
$db=mysql_select_db('regional_data',$con) or die ("Couldn't connect the database");
$SQLx="SELECT * FROM table1";
$runx=mysql_query($SQLx,$con) or die ("SQL Error");
$norx=mysql_num_rows($runx);
while ($rec = mysql_fetch_array($runx))
{
for($i=$rec['sbstart']; $i<=$rec['sbend']; $i++)
{
echo "<option id='options' value='$i'>$i<br></option>";
}
}
答案 0 :(得分:0)
试试这个。这会在构建下拉列表之前从table2构建排除列表:
$con=mysql_connect('localhost','root') or die ("Server connection failure!");
$db=mysql_select_db('regional_data',$con) or die ("Couldn't connect the database");
$exclude = array();
$query = 'SELECT * FROM table2';
$runx=mysql_query($query,$con) or die ("SQL Error");
$norx=mysql_num_rows($runx);
while ($rec = mysql_fetch_array($runx))
{
$exclude[] = $rec['chkNo'];
}
$SQLx="SELECT * FROM table1"
$runx=mysql_query($SQLx,$con) or die ("SQL Error");
$norx=mysql_num_rows($runx);
while ($rec = mysql_fetch_array($runx))
{
for($i=$rec['sbstart']; $i<=$rec['sbend']; $i++)
{
if (!in_array($i, $exclude))
{
echo "<option id='options' value='$i'>$i<br></option>";
}
}
}
答案 1 :(得分:0)
我建议利用array_diff()将下拉列表的初始创建限制为仅包含第二个表中不存在的值,如下所示:
//set up the db connection
$con = mysql_connect('localhost','root') or die ("Server connection failure!");
$db = mysql_select_db('regional_data', $con) or die ("Couldn't connect the database");
//get the range of values from the first table
$SQLx = "SELECT * FROM table1";
$runx = mysql_query($SQLx, $con) or die ("SQL Error");
$rec = mysql_fetch_array($runx);
//create an array representing the range of values
$table1_array = array();
for($i = $rec['sbstart']; $i <= $rec['sbend']; $i++)
{
$table1_array[] = $i;
}
//get the values to be omitted from the second table
$SQLz = "SELECT * FROM table2";
$runz = mysql_query($SQLz, $con) or die ("SQL Error");
//create an array representing the values to be omitted
$table2_array = array();
while ($rec2 = mysql_fetch_array($runz))
{
$table2_array[] = $rec2['chkNo'];
}
//compare the arrays
//this results in an array of only the values you wish to include
$final_array = array_diff($table1_array, $table2_array);
//create the dropdown from the resulting array
foreach ($final_array as $value)
{
echo "<option id='options' value='$value'>$value<br></option>";
}
答案 2 :(得分:0)
$con=mysql_connect('localhost','root') or die ("Server connection failure!");
$db=mysql_select_db('regional_data',$con) or die ("Couldn't connect the database");
$SQLx="SELECT * FROM table1";
$SQLy="SELECT * FROM table2";
$runx=mysql_query($SQLx,$con) or die ("SQL Error");
$runy=mysql_query($SQLy,$con) or die ("SQL Error");
$norx=mysql_num_rows($runx);
while ($rec = mysql_fetch_array($runx))
{
for($i=$rec['sbstart']; $i<=$rec['sbend']; $i++)
{
$exist=0;
while($rec2=mysql_fetch_array($runy)){
if($i==$rec2['chkNo']){
$exist=1;
}
}
if ($exist==0)
echo "<option id='options' value='$i'>$i<br></option>";
}
}