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相关的活动,而其他
最近的输出:
预期输出:-
请参见映射第三个映射表,我将显示映射表的输出
谢谢
答案 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将service
,activity
和service_has_activity
表“链接”在一起。然后使用ORDER BY对数据进行排序。
如果要基于某些条件进行过滤,则可以在查询中添加WHERE
子句。例如如果您只想查看特定服务的数据,请在ORDER BY
行的之前添加此行:
WHERE s.service_name = 'IncomeTax'
然后,您可以在这些结果上编写循环以照顾显示的情况。如果可以的话,让数据库执行这些操作并且只执行PHP代码中的显示部分总是更有效。
最终结果是1个循环(用于显示结果),对数据库的1次访问(用于运行查询)。如果您的数据集很大,那么它也会加快页面的速度。