显示结果无重复

时间:2015-05-08 08:11:43

标签: php mysql

这是我的示例数据库。

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

2 个答案:

答案 0 :(得分:2)

<强>更新

*

当您需要使用单个列时,请不要使用Group By获取它们,请使用仅提取该列。

<强>以前

添加"SELECT * FROM base_groups WHERE base_gp_id='".$data."' GROUP BY base_gp_name" 子句。它将从数据库中获取唯一的结果。试试 -

// init sequences
var sequences = new int[][]
    { 
        new int[] { 1, 2, 3, 4, 5, 7 },
        new int[] { 5, 6, 7 },
        new int[] { 2, 6, 7, 9 },
        new int[] { 4 }
    };

答案 1 :(得分: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&amp;的等效数据库。 LOCATE函数。