2013-07-22 155 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