我有两个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中的所有记录返回一个条目,并为$dbt2中与$dbt1中的UID相关的所有记录返回一个条目。有道理?
因此,输出如下:
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的所有结果,或者我可以在查询中做些什么?我需要再问一次吗?我需要为任何给定的UID报告每个$dbt1记录的所有$dbt2条目。我觉得我甚至问不好这个问题…对不起。

最佳答案

您没有查询问题。你问得很好(据我所知)。你的显示器有问题。实际上,您需要循环一些内存,创建一个简单的状态机:

$prev_dbt1 = null;
while($row = mysql_fetch($result)) {
   if ($prev_dbt1 <> $row['dbt1']) {
       ... display new table header ...
       $prev_dbt1 = $row['dbt1']; // update for next loop
   }
   display other stuff as usual
}

07-26 07:14