【问题标题】:How to filter activity related to services如何过滤与服务相关的活动
【发布时间】:2018-08-21 20:41:04
【问题描述】:

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
    • 纳税
    • 法定审计

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

谢谢

【问题讨论】:

  • 你的问题我不清楚。如果我查看您的预期输出,对于Incometax,您保留第一个值,对于GST,您保留第二个值,对于TDS,您保留第三个值。是这样吗?您想要服务指数 == 活动指数吗?如果是这样,请修改您的查询$service 并添加WHERE service_id = activity.activity_id
  • 最好用图表或示例来展示您评论的内容。您可以编辑问题,这样它对未来的读者来说是完整的。
  • 先生,请检查附在帖子中的图片......第一张图片是数据库中的服务,第二张图片是数据库中的活动,第三张是两个表的映射

标签: php mysql


【解决方案1】:

使用您的示例数据,我想出了一个更简单的解决方案。您的代码尝试分两步完成数据库可以为您做的事情。

您的第一个查询获取服务。然后列出每个相关的活动,一个服务一个服务。这种方法虽然有效,但会导致数据库被访问两次。数据库可以使用 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 次访问数据库(用于运行查询)。如果您有一个大型数据集,它也会加快您的页面速度。

【讨论】:

  • 对不起,先生,但结果与最近的输出相同。我想在 where 子句中添加服务 ID,这是 value = 的输出,如何我这样做
  • 与您发布的“近期输出”或“预期输出”相同?我在这里在我的 MySQL 上运行它,我得到了我在答案中发布的结果。
  • 您的查询是正确的,我在 where 子句中为与服务相关的过滤活动添加的 where 子句有问题
  • 你想要什么过滤器?发布的预期结果正是查询产生的结果。服务和活动之间的关系在service_has_activity 表中定义。
  • 完成,先生,我发布了错误的查询,您的查询输出是正确的,非常感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多