2 つの MySQL テーブルがあります。テーブル「dbt1」には、主キー「UID」を持つ一意のレコードがあります。
テーブル「dbt2」はそのキーを使用しますが、UID ごとに複数のレコードがあります。
PHP と適切な MySQL クエリを使用して、dbt1 からレコードを取得し、dbt2 を調べて同じ UID を持つすべてのレコードを見つけ、完了するまでそれらを連続して出力する方法を教えてください。次に、戻って dbt1 から次のレコードを表示し、where 句が満たされるまで続けますか?
これは私がこれまでに持っているものです:
クエリ:
$dbname = 'ext';
$dbt1 = 'questions';
$dbt2 = 'stats';
$data = "questions.UID qUID, QUESTION, ANSWER_A, ANSWER_B, ANSWER_C, ANSWER_D, FIGURE, CCAstats.UID sUID, DATE, PROP, CRPBI";
$mysql_link = mysql_connect($dbhost,$dbuser,$dbpass);
$sql = ("SELECT $data FROM $dbt1 LEFT JOIN $dbt2 ON $dbt1.UID = $dbt2.UID WHERE $dbt1.SECTION = $section ORDER BY $dbt1.UID;");
$results = mysql_db_query($dbname,$sql) or die("no results");
if ($results)
{
while($row = mysql_fetch_assoc($results))
{
print "$row[qUID]"." "."$row[QUESTION]"."<br>";
print "A. $row[ANSWER_A]"."<br>";
print "B. $row[ANSWER_B]"."<br>";
print "C. $row[ANSWER_C]"."<br>";
print "D. $row[ANSWER_D]"."<br>";
print "$row[FIGURE]"."<br>";
print "$row[DATE]".", "."$row[PROP]".", "."$row[CRPBI]"."<br>";
}
mysql_free_result($results);
}
mysql_close();
これは、件名 (POST 変数として渡される) に基づいてすべての結果を出力するように機能し、$dbt1 の特定のレコードに対して $dbt2 に複数のレコードがある場合は、出力を複製します。
問題は、$dbt1 からの出力を重複させたくないということです。$dbt1 のすべてのレコードに対して 1 つのエントリを返し、$dbt1 の UID に関連する $dbt2 のレコードをできるだけ多く返したいと考えています。わかる?
したがって、出力は次のようになります。
UID QUESTION 1
A. ANSWER A
B. ANSWER B
C. ANSWER C
D. ANSWER D
DATE, PROP, CRPBI
DATE{2}, PROP{2}, CRPBI{2}
UID QUESTION 2
A. ANSWER A
B. ANSWER B
C. ANSWER C
D. ANSWER D
DATE, PROP, CRPBI
DATE{2}, PROP{2}, CRPBI{2}
私の質問は、$dbt2 からすべての結果を取得するために別のループが必要ですか、それともクエリで何かできることはありますか? 2 番目のクエリが必要ですか? 任意の UID について、$dbt1 レコードごとにすべての $dbt2 エントリを報告する必要があります。質問もまともにできてない気がします…すいません。