2013-07-22 154 views
0

我有两个查询生成面板标识。一个查询只生成与产品相关的面板ID。另一个查询生成所有可用的面板标识。如果查询结果与其他查询结果的任何值匹配

我想通过复选框显示所有的面板,但有相关的面板显示为选中状态。我已将相关面板存储在$panel_id中但是,以下代码似乎只循环一次,因为它只检查相关面板中的一个。我不知道我该怎么做。

//related panels 
$panel_id = $row['panel_profile_id']; 


/all panels 
$result = mysqli_query($con,"SELECT * FROM panel_profile"); 

while($row = mysqli_fetch_array($result)) { 
    if($row['panel_profile_id'] == $panel_id) { 
     echo '<input type="checkbox" name="panel_profile[]" value="' . $row['panel_profile_id'] . '" checked="checked">' . $row['name'] . '<br />'; 
    } else { 
     echo '<input type="checkbox" name="panel_profile[]" value="' . $row['panel_profile_id'] . '">' . $row['name'] . '<br />'; 
    } 
} 

表结构

表:panel_table

panel_profile_id | name 
-----------------+----- 
1    | flat 

表:relationship_table

wood_species_id | panel_profile_id 
----------------+----------------- 
1    | 1 
+0

你可以发表你的2代表的结构? – Maximus2012

+0

不知道如何在这里设置样式表 – izharbuen

+0

哪个表具有panel_profile_id字段? – Maximus2012

回答

2

你可以让数据库做的工作为你使用左连接选择应检查哪些panel_ids。

例如,

如果下面的返回的要检查面板配置文件列表,

SELECT panel_profile_id FROM relationship_table WHERE wood_species_id=4 

你可以使用

SELECT panel_profile.panel_profile_id, 
     (products.panel_profile_id IS NOT NULL) AS checked 
    FROM panel_profile LEFT JOIN relationship_table 
    ON panel_profile.panel_profile_id=products.panel_profile_id 
    WHERE wood_species_id=4 

该查询返回两列, panel_profile_id和一个检查列,如果它应该被检查,则为1;如果不应该检查,则为0。

0

您可以使用子查询来获得对应的产品面板,然后标记那些面板作为托运像这样:

SELECT *, panel_profile_id IN (SELECT panel_profile_id FROM relationship_table WHERE wood_species_id = 2) as checked 
FROM panel_table 

SQL Fiddle