私の最初の投稿は、可能な限り徹底的に試みました。何か問題が発生した場合は、事前にお詫び申し上げます。私もPHP/SQLの初心者なので、しばらくお待ちください。ループ内のループについて同様の質問をいくつか見つけましたが、私の場合に解決策が適用されるかどうかはわかりません。
tws_workshopNamesとtws_workshopsの2つのテーブルがあります。tws_workshopNamesの主キーは、2つのテーブルを関連付けるためにtws_workshopsの外部キーとして使用されます。これを2つの表に分けた理由は、同じワークショップの名前/価格/説明が複数の日時に提供される場合が多いためです。
スクリーンショットを送信することはできませんが、SQLServerのテーブルデザインの概要は次のとおりです。
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テーブルを呼び出します。しかし、私はこれについて多くのことを読んでおり、dbへの呼び出しが多くなるため、これが適切なアプローチではないことは明らかですが、代替案を理解するのに苦労しています。
必要な出力:
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呼び出しを含まないソリューションです。
助けてくれてありがとう、これに頭をぶつけて数日経ちました...