我有两个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中的任何给定记录中的$ 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条目。我觉得我甚至不能正确地提出这个问题......对不起。
答案 0 :(得分:1)
您没有查询问题。你正在查询(据我所知)。您有 DISPLAY 问题。基本上你需要给你循环一些内存,创建一个简单的状态机:
$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
}
答案 1 :(得分: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";
}
}