如何过滤与服务相关的活动

时间:2018-08-21 11:01:41

标签: php mysql

services In databse

Activity in db

Mapping of serviceactivity

PHP

<?php include("connect.php");?>
<?php 
    $activityoneid = "select activity.activity_name,activity.activity_id 
                      from activity 
                      join serviceactivitymap on activity.activity_id = serviceactivitymap.activity_id";

    $activityonevalue = $conn->query($activityoneid) or die ($conn>error.__LINE__);
    $activitiesone = [];

    while ($row = $activityonevalue->fetch_assoc()) {
        $activitiesone[] = $row;
    }

    //for services
    $service = "select * from service";
    $servicevalue = $conn->query($service) or die ($conn>error.__LINE__);
    $services = [];

    while ($row = $servicevalue->fetch_assoc()) {
        $services[] = $row;
    }

    foreach($services as $serve)
    {
?> 
        <input type = "checkbox" name = "service" value="<?php echo $serve['service_id']?>">
        <?php echo $serve['service_name']?>
        <br>
        <?php foreach($activitiesone as $activiti)
            {
        ?>
            <input type = "checkbox" name = "activity" value = "<?php echo $activiti['activity_id']?>">
            <?php echo $activiti['activity_name'];?>
        <?php 
            } 
        ?>
        <br>
    <?php 
    }?>

这是我的展示服务和活动代码        ##最近输出##:- 所有服务都显示相同的活动,我可以使用service_id过滤数据表示是否显示与服务ID相关的活动,如果服务ID = 1,则仅显示与1相关的活动,而其他

最近的输出:

  • 所得税
    • 回灌
    • 修改后的退货填充
    • 税收支付
    • 法定审计
  • TDS
    • 返回灌装
    • 修改后的退货填充
    • 税收支付
    • 法定审计

预期输出:-

  • 所得税
    • 返回灌装
    • 修改后的退货填充
  • TDS
    • 税金
    • 法定审计

请参见映射第三个映射表,我将显示映射表的输出

谢谢

1 个答案:

答案 0 :(得分:0)

使用您的样本数据,我想出了一个更简单的解决方案。您的代码试图通过两个步骤来完成数据库可以为您完成的工作。

您的第一个查询获取服务。然后按服务列出每个相关的活动。尽管此方法有效,但会导致数据库被访问两次。数据库可以使用SQL为您完成此任务。

以下是查询:

SELECT s.service_name,     
       a.activity_name
FROM service AS s
JOIN service_has_activity AS sha ON s.service_id  = sha.service_id
JOIN activity             AS a   ON a.activity_id = sha.activity_id
ORDER BY s.service_name, a.activity_name

结果是:

Incometax     Return Filing
Incometax     Revised Return Filing
TDS           Statutory Audit
TDS           Tax Payment

此查询使用JOIN将serviceactivityservice_has_activity表“链接”在一起。然后使用ORDER BY对数据进行排序。

如果要基于某些条件进行过滤,则可以在查询中添加WHERE子句。例如如果您只想查看特定服务的数据,请在ORDER BY行的之前添加此行:

WHERE s.service_name = 'IncomeTax'

然后,您可以在这些结果上编写循环以照顾显示的情况。如果可以的话,让数据库执行这些操作并且只执行PHP代码中的显示部分总是更有效。

最终结果是1个循环(用于显示结果),对数据库的1次访问(用于运行查询)。如果您的数据集很大,那么它也会加快页面的速度。