0

我有两个查询生成面板 ID。一个查询仅生成与产品相关的面板 ID。另一个查询生成所有可用的面板 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
4

2 回答 2

2

您可以让数据库为您完成工作,方法是使用左连接来选择应该检查哪些 panel_id。

例如,

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

  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。

于 2013-07-22T22:22:34.557 回答
0

您可以使用子查询来获取与产品对应的面板,然后将这些面板标记为已选中,如下所示:

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

SQL小提琴

于 2013-07-22T22:31:45.940 回答