我的上一个问题不太好,所以我很抱歉“打开”新的。
导入数据:
表1
表2
查询1(内容结果):
查询2(内容结果):
所以,我有一个复选框需要更改为“已检查”,如果我每次获取这两个表(正确查询c)并且table1上存在一些来自table2的id。
我这样做:
<?php
while($row = mysql_fetch_array($Query1))
{
while($row2 = mysql_fetch_array($Query2))
{
$checkit = '';
if($row['id'] == $row2['id'] )
$checkit = 'checked="checked"';
}
?>
<input type="checkbox" name = "checkbox-1" class="checkbox" value ="" <?php echo $checkit ?> />
<?php
}
}
?>
问题:当1 = 1时,我可以“检查”第一个结果。
虽然只获取一次。我需要的结果应该像这样(id):11-13 | 21-23 | 31-33和选中复选框应仅在11和33
时出现我希望你明白这一点..
答案 0 :(得分:1)
你有使用
$checkit = 'checked="yes"';
应该是
$checkit = 'checked="checked"';
试试这个: -
<?php
$arr_one = '';
while($row = mysql_fetch_array($Query1))
{
$arr_one[]= $row['id'];
}
while($row2 = mysql_fetch_array($Query2))
{
$checkit = '';
$id = $row2['id'];
if (in_array($id,$arr_one))
{
$checkit = 'checked="checked"';
}
?>
<input type="checkbox" name= "checkbox-1" class="checkbox" value ="" <?php echo $checkit ?> />
<?php
}
?>
答案 1 :(得分:1)
您需要在内部while块后重置内部结果指针。
while($row = mysql_fetch_array($Query1))
{
while($row2 = mysql_fetch_array($Query2))
{
// Your code
}
mysql_data_seek($Query2,0);
}
答案 2 :(得分:1)
我愿意:
$t2data = array();
while($row2 = mysql_fetch_assoc($Query2)) {
$t2data[] = $row2[0];
}
while($row1 = mysql_fetch_assoc($Query1)) {
if(in_array($row1[0], $t2data)) {
$checked = 'checked';
}
}
话虽这么说,如果两个表都在同一个数据库中,最好通过OUTER JOIN查询来解决:
select t1.id, (t2.t1_id IS NOT NULL) as checked
from t1
left join t2 on (t1.id = t2.t1_id)
然后遍历结果并仅检查查询中checked = true的框。