我有两个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变量传递)的所有结果,并重复输出,如果有一个以上$ 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条目。我觉得我甚至不能正确地问这个问题......对不起。
谢谢。我确实有显示问题。我似乎无法获得任何给定的dbt1结果的多个dbt2记录。你提供的代码似乎也没有做到这一点。对于dbt1中的每个匹配,我仍然只从dbt2获得一条记录。如果dbt1中dbt1中有多条记录,那么我会重复dbt1中的所有内容......当我真正想要的是dbt2时,因为我已经有了dbt1的东西! :-) – 2013-03-22 22:16:27
你的解决方案与这个非常相似:http://stackoverflow.com/questions/6358902/properly-display-results-of-mysql-one-to-many-query哪些不适合我。嗯... – 2013-03-22 22:30:13