Наверное первый вариант лучше.
Дело в том, що у меня сайт онлайн тестирования. Что-то типа moodle.
И есть такие базы данных:
-база с названиями тем
-база з вопросами
-база с вариантами ответа
-база с результатами тестирования
-база с даннымт о тесте, тоесть определяет в какой последовательности идут вопросы и в какой ответы так как при новом тестировании они в рандомном порядке.
И вот получается, что генерация страницы как бы в два етапа:
при первом заходе на тест сохраняется информация про последовательность вопросов и вариантов ответов, а на втором этапе по сохраненной информации собирается вопрос с ответом и отображается страница.
Дело в том, что на втором этапе время генерации страницы (тоесть при повторном заходе на тест или продолжении тестирования) время генерации страницы 0,2-0,4сек. А вот первый етап затягивается на 18-22 сек при том, что на втором этапе запросов к БД больше...
Везде получается запрос к БД в цыкле другого запроса... И наверное от этого такое время генерации страницы.
Вот например часть из первого этапа
$FORM = "test=numner=24=random"
WHILE($FORM[$i]==TRUE){
$FORMin = explode("=",$FORM[$i]);
IF($FORMin[0]=='test'){
IF($FORMin[1]=='number'){
IF(substr($FORMin[3],0,6)=='random')$random = ' ORDER BY RAND() ';
@$SQLquestion = mysql_query("
SELECT *
FROM `testing_questions`
WHERE `testing_questions-toppic` = '".$TSTtoppic['testing_toppic-id']."' ".$random."
LIMIT ".$FORMin[2]."");
@$TSTquestion = mysql_fetch_array($SQLquestion);
IF($TSTquestion==TRUE){
DO{
test_preform_save($GLOBALuser['users_id'],$TSTtoppic['testing_toppic-id'],$FORMhash,$TSTquestion['testing_questions-type'],'test',$page,$TSTquestion['testing_questions-id'],$number,$FORMin[4]);
$number++;
IF($mode == 'studing')$page++;
}WHILE($TSTquestion = mysql_fetch_array($SQLquestion));
} else {
echo showerror_sql(mysql_error());
}
UNSET($random);
}
............
и далее
FUNCTION test_preform_save($userid,$toppicid,$hash,$questiontype,$type,$page,$id,$number,$answer){
IF(mysql_query("INSERT INTO `testing_preresult` (
`testing_preresult-user` ,
`testing_preresult-toppic` ,
`testing_preresult-hash` ,
`testing_preresult-type` ,
`testing_preresult-page` ,
`testing_preresult-question` ,
`testing_preresult-number`
) VALUES (
'".$userid."',
'".$toppicid."',
'".$hash."',
'".$type."',
'".$page."',
'".$id."',
'".$number."'
)
")==TRUE){
$insert_id = mysql_insert_id();
IF($answer=='')$random = ' ORDER BY RAND() ';
IF($questiontype==1 OR $questiontype==2 OR $questiontype==4){
@$SQLanswer = mysql_query("SELECT * FROM `testing_answers` WHERE `testing_answers-question` = '".$id."' ".$random);
@$TSTanswer = mysql_fetch_array($SQLanswer);
IF($TSTanswer==TRUE){
DO{
IF(mysql_query("INSERT INTO `testing_preresult` (
`testing_preresult-user` ,
`testing_preresult-hash` ,
`testing_preresult-type` ,
`testing_preresult-page` ,
`testing_preresult-question`
) VALUES (
'".$userid."',
'".$hash."',
'answer-".$insert_id ."',
'',
'".$TSTanswer['testing_answers-id']."'
)")==FALSE){
echo showerror_sql(mysql_error());
}
}WHILE($TSTanswer = mysql_fetch_array($SQLanswer));
} else {
echo showerror_sql(mysql_error());
}
}
_____________
Одесса - мой город!)))