2015-05-08 88 views
0

這是我的示例數據庫。顯示結果不重複

 
1)base_groups 
|base_gp_id| base_gp_name | 
---------------------------- 
| 1  | Technician | 
| 2  | Sales  | 
| 3  | R&D   | 
| 4  | Testing  | 

2)base_subgroup 
          (FK of base_groups) 
| base_id | base_name | base_gp_id | 
----------------------------------------------- 
| 1  | group1  | 1, 2, 3  | 
| 2  | group2  |  3   | 
| 3  | group3  |  3, 4  | 

我的問題是我應該如何去以顯示該組名存實亡一次。提前致謝。
這是我的代碼和結果。以上代碼的

<?php 
//$groupInfo consists of base_subgroup ID : 1,2 and 3 
foreach($groupInfo as $value) 
{ 
    $group_sql = base_executeSQL("SELECT * FROM base_subgroup WHERE base_name='".$value."'"); 
    while($row = base_fetch_array($group_sql)) 
    if(base_num_rows($group_sql) != 0) 
    { 
     $group_data = explode(", ",$row['base_gp_id']); 

     foreach($group_data as $data) 
     { 
      $group_query = base_executeSQL("SELECT * FROM base_groups WHERE base_gp_id='".$data."'"); 
      while($row_group = base_fetch_array($group_query))    
       echo $row_group['base_gp_name'] . "<br>"; 
     } 
    } 
} 

輸出:

Technician 
Sales 
R&D 
R&D 
R&D 
Testing 

但是,這是我必須拿出結果:

Technican 
Sales 
R&D 
Testing 
+0

'集團BY'應該做的伎倆 –

+1

存儲FK的爲csv是非常糟糕的分貝設計!你應該改變它 – Jens

+0

@Jens我知道這是一個非常糟糕的設計,但我必須遵循先前的系統設計,並且由於時間限制所做的最小變化。 – Sollo

回答

2

更新

$group_data = array(); 
foreach($groupInfo as $value) 
{ 
    $group_sql = base_executeSQL("SELECT * FROM base_subgroup WHERE base_name='".$value."'"); 

    while($row = base_fetch_array($group_sql)) 
    if(base_num_rows($group_sql) != 0) 
    { 
     $group_data = array_merge($group_data, explode(", ",$row['base_gp_id'])); 
    } 
} 
$group_data = array_unique($group_data); 
$group_query = base_executeSQL("SELECT * FROM base_groups WHERE base_gp_id IN (". implode(',', $group_data) .")"); 
while($row_group = base_fetch_array($group_query)) {    
    echo $row_group['base_gp_name'] . "<br>"; 
} 

WHE n您需要單列一起工作,然後與不取*他們,使用只獲取該列..

以前

添加Group By條款。它將從數據庫中獲取唯一的結果。試着用 -

"SELECT * FROM base_groups WHERE base_gp_id='".$data."' GROUP BY base_gp_name" 
+0

它不起作用。我之前嘗試過。 :( – Sollo

+0

@Sollo你得到一個錯誤? – Polaris

+0

@Sollo查看更新。 –

1

如果你正在使用MySQL,這裏是一個非常簡單的解決方案:

<?php 
    //$groupInfo consists of base_subgroup ID : 1,2 and 3 
    foreach($groupInfo as $value) 
    { 
     $res = base_executeSQL("SELECT t2.* FROM `base_subgroup` t1 JOIN `base_groups` t2 ON LOCATE(CONCAT(',',t2.base_gp_id,','), CONCAT(',',t1.base_gp_id,','))>0 WHERE t1.base_name='".$value."' GROUP BY t2.base_gp_id"); 
     while($row = base_fetch_array($res)) 
      echo $row['base_gp_name'] . "<br>"; 
    } 

注意,我假定存在存儲在base_subgroup表CSV列表之間沒有空格。
如果你正在使用MySQL之外的任何關係型數據庫,你應該使用等效於CONCAT & LOCATE功能。