1

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 エントリを報告する必要があります。質問もまともにできてない気がします…すいません。

4

2 に答える 2

0

これが私が思いついたものです。それは機能しますが、どれほど効率的かはわかりません。幸いなことに、私のテーブルはかなり小さいです。

$query1 = "SELECT * FROM $dbt1 WHERE $dbt1.SECTION = $section ORDER BY $dbt1.UID";
$query1Result = mysql_db_query($dbname,$query1) or die("no query");

while ($row = mysql_fetch_assoc($query1Result)) 
{
    echo $row['UID']." ".$row['QUESTION']."\n";
    echo $row['ANSWER_A']."\n";
    echo $row['ANSWER_B']."\n";
    echo $row['ANSWER_C']."\n";
    echo $row['ANSWER_D']."\n";
    echo $row['FIGURE']."\n";
    $query2 = "SELECT * FROM $dbt2 WHERE $row[UID] = $dbt2.UID ORDER BY $dbt2.DATE";
    $query2Result = mysql_db_query($dbname,$query2) or die("no query2");
    while ($stat = mysql_fetch_assoc($query2Result))
    {
        echo $stat['DATE']."\n";
        echo $stat['PROP']."\n";
        echo $stat['CRPBI']."\n\n";
    }

}    
于 2013-03-25T02:24:09.713 に答える