J'ai écrit un code pour voir le site un sondage sur mon site et il fonctionne très bien, mais je pense qu'il est très inefficace, quelqu'un peut-il m'aider à simplifier cette requête en 1 ou pas de l'utiliser RAND ()?
J'ai 3 tables, une pour les "bulletins de vote" ou de groupes de questions du sondage. Alors les questions "qui se trouvent dans les bulletins de vote. Puis les «réponses» pour qui appartiennent à chaque question. Le code suivant affiche 1 question aléatoire à partir d'un scrutin ouvert, il répond à toutes les commandes de manière aléatoire l'enfant contre le PARE n'est pas question.
<?php
$POLL_SQL = "SELECT ";
$POLL_SQL .= "B.id, B.StartTime, B.EndTime, B.BallotName, B.BallotDesc, B.GameID, B.CompetitionID, ";
$POLL_SQL .= "Q.id AS question_id, Q.parent_ballot_id, Q.question ";
$POLL_SQL .= "FROM votingpolls_ballots B, votingpolls_questions Q ";
$POLL_SQL .= "WHERE ";
$POLL_SQL .= "(B.EndTime = 0 OR B.EndTime > ".time().") ";//Hasn't Ended
$POLL_SQL .= "AND B.StartTime > 0 ";//Ballot Started
$POLL_SQL .= "AND Q.parent_ballot_id = B.id ";
$POLL_SQL .= "ORDER BY RAND() LIMIT 0,1";
if($POLL_RESULT = $db->query($POLL_SQL))
{
while($POLL_DATA = $POLL_RESULT->fetch_array())
{
$template->assign_block_vars('side_table.site_poll',array(
'QUESTION_ID' => intval($POLL_DATA['question_id']),
'QUESTION' => DBStringExtract($POLL_DATA['question'])
));
$ANSWERS_SQL = "SELECT ";
$ANSWERS_SQL .= "id, parent_question_id, answer ";
$ANSWERS_SQL .= "FROM votingpolls_answers ";
$ANSWERS_SQL .= "WHERE parent_question_id = ".intval($POLL_DATA['question_id'])." ";
$ANSWERS_SQL .= "ORDER BY RAND()";
if($ANSWERS_RESULT = $db->query($ANSWERS_SQL))
{
while($ANSWERS_DATA = $ANSWERS_RESULT->fetch_array())
{
$template->assign_block_vars('side_table.site_poll.answer',array(
'ANSWER_ID' => intval($ANSWERS_DATA['id']),
'ANSWER' => DBStringExtract($ANSWERS_DATA['answer'])
));
}
}
break;
}
}
?>
- <?php
- $POLL_SQL = "SELECT ";
- $POLL_SQL .= "B.id, B.StartTime, B.EndTime, B.BallotName, B.BallotDesc, B.GameID, B.CompetitionID, ";
- $POLL_SQL .= "Q.id AS question_id, Q.parent_ballot_id, Q.question ";
- $POLL_SQL .= "FROM votingpolls_ballots B, votingpolls_questions Q ";
- $POLL_SQL .= "WHERE ";
- $POLL_SQL .= "(B.EndTime = 0 OR B.EndTime > ".time().") ";//Hasn't Ended
- $POLL_SQL .= "AND B.StartTime > 0 ";//Ballot Started
- $POLL_SQL .= "AND Q.parent_ballot_id = B.id ";
- $POLL_SQL .= "ORDER BY RAND() LIMIT 0,1";
-
- if($POLL_RESULT = $db->query($POLL_SQL))
- {
- while($POLL_DATA = $POLL_RESULT->fetch_array())
- {
- $template->assign_block_vars('side_table.site_poll',array(
- 'QUESTION_ID' => intval($POLL_DATA['question_id']),
- 'QUESTION' => DBStringExtract($POLL_DATA['question'])
- ));
- $ANSWERS_SQL = "SELECT ";
- $ANSWERS_SQL .= "id, parent_question_id, answer ";
- $ANSWERS_SQL .= "FROM votingpolls_answers ";
- $ANSWERS_SQL .= "WHERE parent_question_id = ".intval($POLL_DATA['question_id'])." ";
- $ANSWERS_SQL .= "ORDER BY RAND()";
-
- if($ANSWERS_RESULT = $db->query($ANSWERS_SQL))
- {
- while($ANSWERS_DATA = $ANSWERS_RESULT->fetch_array())
- {
- $template->assign_block_vars('side_table.site_poll.answer',array(
- 'ANSWER_ID' => intval($ANSWERS_DATA['id']),
- 'ANSWER' => DBStringExtract($ANSWERS_DATA['answer'])
- ));
- }
- }
-
- break;
- }
- }
- ?>
J'ai lu sur ce blog sur les gars comment vous pouvez utiliser mt_rand () au lieu de rand () [
http://akinas.com/pages/en/blog/mysql_random_row/ ], Mais j'ai 2 jeux de choses que j'ai besoin randomisés et 2 requêtes, alors je me demandais si cela était encore réaliste, considérant qu'il créerait 4 requêtes et il prétend que 79% de la RAND () le temps d'exécution. Mon principal problème est Ive jamais utilisé rand () et je suce quand il s'agit de réduire les requêtes MySQL en boucles.
There's no place like 127.0.0.1, badass part is now it's ::1