我有兩個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