php - 如何过滤与服务相关的活动
问题描述
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
- 纳税
- 法定审计
见映射第三个映射表,我将显示映射表的输出
谢谢
解决方案
使用您的示例数据,我想出了一个更简单的解决方案。您的代码试图分两步完成数据库可以为您做的事情。
您的第一个查询获取服务。然后列出每个相关的活动,一个服务一个服务。这种方法虽然有效,但会导致数据库被访问两次。数据库可以使用 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
service
此查询使用 JOIN 将、activity
和service_has_activity
表“链接”在一起。然后使用 ORDER BY 对数据进行排序。
如果要根据特定条件进行过滤,可以WHERE
在查询中添加子句。前任。如果您只想查看特定服务的数据,请在以下行之前添加此ORDER BY
行:
WHERE s.service_name = 'IncomeTax'
然后你可以在这些结果上编写一个循环来处理显示。如果可以的话,让数据库做这些总是更有效,并且只做 PHP 代码中的显示部分。
最终结果是 1 次循环(用于显示结果),1 次访问数据库(用于运行查询)。如果你有一个大数据集,它也会加快你的页面速度。
推荐阅读
- javascript - 来自数组的 D3 分组条形图
- python - 一起运行flask和sql alchemy时出错
- python - 如何在不手动登录的情况下使用 API 编辑谷歌表格?
- swift - 在 UITableViewCell 中保留开关按钮的状态 - Swift
- wso2 - 如何为 WSO2 中的身份验证配置外部 Web 服务 (REST)?
- java - 由于内存限制,部署在 Google Cloud App Engine 中的 Spring Boot 应用程序无法启动
- ios - 加载表格时预选单元格
- static - 如何在一行 Nuxt.js 中缩小 HTML 代码?
- spring - 如何在guice中指定对象实例化顺序?
- python - 将Python中的数据写入本地文件并同时上传到FTP不起作用