我正試圖學習PHP和MySQL中的多個SQL查詢的最佳實踐。不知道我是否應該有兩個單獨的查詢,或者如果我應該加入(或聯合?)我的查詢到一個。多個SELECT查詢和循環遍歷PHP和mySQL結果
我可以做以下事情還是有另一種方式來完成同樣的事情?
請務必注意,我的第一個查詢是提取問題和答案的測驗列表。第二個查詢是拉取我將用於根據測驗分數分配給用戶的分數配置文件列表。這兩個表之間的唯一關係是兩者都使用與我的「測驗」表中鏈接到ID的相同外鍵。我不需要並排連接這些表,但我想我可能需要將它們聯合起來,這樣我的第二個查詢結果纔會出現在第一個查詢結果之後。
現在,如果我應該將我的查詢合併爲一個,我不知道如何循環查詢結果來創建我的數組。當我遍歷每個結果時,我會需要一些條件邏輯來處理我的第一個查詢結果,而另一些查詢結果則與我的第二個查詢結果不同。我會如何寫這些條件?
這是我現在正在做的,這似乎是兩個單獨的查詢工作的罰款...
......在數據庫中查詢第一時間讓我的問答題和答案:
$result_quiz = mysql_query("
SELECT quiz_question.question_text, quiz_question.id, quiz_answer.answer_text, quiz_answer.points
FROM quiz
JOIN quiz_question ON (quiz.id = quiz_question.quiz_id)
JOIN quiz_answer ON (quiz_question.id = quiz_answer.quiz_question_id)
WHERE quiz.id = $id;
");
......然後根據上面的查詢,建立我的問題和答案數組:
$quiz = array();
while ($row = mysql_fetch_assoc($result_quiz)) {
if (!isset($quiz['questions']['q'.$row['id'].''])) {
$quiz['questions']['q'.$row['id'].''] = array(
'question' => $row['question_text'],
'answers' => array()
);
}
$quiz['questions']['q'.$row['id'].'']['answers'][] = array('answer' => $row['answer_text'],'points' => $row['points']);
}
......然後查詢數據庫的第二次拿到得分配置文件的列表:
$result_profile = mysql_query("
SELECT quiz_profile.name, quiz_profile.description, quiz_profile.min_points, quiz_profile.max_points
FROM quiz
JOIN quiz_profile ON (quiz.id = quiz_profile.quiz_id)
WHERE quiz.id = $id;
");
......然後通過我的第二個查詢循環,所以我可以追加分數型材我數組:
while ($row = mysql_fetch_assoc($result_profile)) {
$quiz['profiles'][] = array('name' => $row['name'],'description' => $row['description'],'min_points' => $row['min_points'],'max_points' => $row['max_points']);
}
這是最好的方法?
或者我應該將我的查詢合併爲一個使用UNION?
如果是這樣,我該如何寫我的條件來知道我循環的結果?
非常感謝!