我的第一篇文章,试图尽可能彻底,如果我有什么问题,请提前道歉。我对 PHP/SQL 也很陌生,所以请耐心等待。我发现了一些关于循环内循环的类似问题,但我不确定这些解决方案是否适用于我的案例。
我有两个表,tws_workshopNames 和 tws_workshops。tws_workshopNames 中的主键用作 tws_workshops 中的外键来关联两个表。我把它分成两张表的原因是在很多情况下,在多个日期/时间提供相同的研讨会名称/价格/描述。
无法提交屏幕截图,但这是 SQL Server 中表设计的简化大纲:
tws_workshopNames:
workshopNameID (pri)
description
price
etc.
tws_workshops:
workshopID (pri)
workshopNameID (foreign)
date
time
etc.
我想要发生的基本上是这样的:
- 查询tws_workshopNames表,显示workshopName/price/description/etc。
- 对于每个 WorkshopName,通过 tws_workshops 表并显示所有具有相同 WorkshopNameID 的记录
换句话说,通过 tws_workshopNames 显示第一个 WorkshopName,然后通过 tws_workshops 显示与该 WorkshopName 相关的所有记录,然后转到 tws_workshopNames 中的下一个 WorkshopName,显示与该 WorkshopName 相关的所有记录等。
我可以通过在 while 循环中使用 while 循环来实现所需的结果,其中外部循环调用 tws_workshopNames,嵌套循环调用 tws_workshops 表。但是,我已经阅读了很多关于此的内容,很明显这不是一个好方法,因为它会导致对数据库的大量调用,但我很难理解任何替代方案。
期望的输出:
Workshop 1
price
description
date (of workshop 1)
time (of workshop 1)
...
Workshop 2
price
description
first date (of workshop 2)
first time (of workshop 2)
second date (of workshop 2)
second time (of workshop 2)
third date (of workshop 2)
third time (of workshop 2)
...
Workshop 3
price
description
date (of workshop 3)
time (of workshop 3)
...
etc.
以下是适用于嵌套 while 循环的当前代码:
<?php
// query workshopNames table, what types of workshops are available?
$query = mssql_init("tws_sp_workshopNames", $g_dbc);
// pull up result
$result = mssql_execute($query);
$numRows = mssql_num_rows($result);
while($row = mssql_fetch_array($result)) {
echo "<div style=\"...\">
<span class=\"sectionHeader\">" . $row['workshopName'] . "</span><br />
<span class=\"bodyText\"><strong>" . $row['price'] . "</strong></span><br />
<span class=\"bodyText\">" . $row['description'] . "</span>";
$workshopNameID = $row['workshopNameID'];
// query workshops table, what are the dates/times for each individual workshop?
$query2 = mssql_init("tws_sp_workshops", $g_dbc);
mssql_bind($query2, "@workshopNameID", $workshopNameID, SQLVARCHAR);
//pull up result
$result2 = mssql_execute($query2);
$numRows2 = mssql_num_rows($result2);
while($row2 = mssql_fetch_array($result2)) {
echo $row2[date] . " ";
echo $row2[time] . "<br />";
};
echo "</div><br />";
};
?>
存储过程非常简单:
tws_sp_workshopNames = "SELECT workshopNameID, workshopName, description, location, price FROM tws_workshopNames"
tws_sp_workshops = "SELECT date, time, maxTeachers, maxStudents, teachersEnrolled, studentsEnrolled FROM tws_workshops WHERE workshopNameID=@workshopNameID"
希望这一切都相对清楚,我真正在寻找的是获得相同结果的更好方法,即不涉及循环内的 db 调用的解决方案。
在此先感谢您的帮助,几天来一直在撞我的头...