这是我的示例数据库。
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 :(得分: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
函数。