Besoin de faire cela de manière plus efficace...

  • PolishHurricane
  • Mastermind
  • Mastermind
  • Avatar de l’utilisateur
  • Inscription: Fév 17, 2005
  • Messages: 1585
  • Status: Offline

Message Juillet 11th, 2010, 7:14 am

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 Code: [ Select ]
<?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;
       }
      }
?>
  1. <?php
  2.       $POLL_SQL = "SELECT ";
  3.       $POLL_SQL .= "B.id, B.StartTime, B.EndTime, B.BallotName, B.BallotDesc, B.GameID, B.CompetitionID, ";
  4.       $POLL_SQL .= "Q.id AS question_id, Q.parent_ballot_id, Q.question ";
  5.       $POLL_SQL .= "FROM votingpolls_ballots B, votingpolls_questions Q ";
  6.       $POLL_SQL .= "WHERE ";
  7.       $POLL_SQL .= "(B.EndTime = 0 OR B.EndTime > ".time().") ";//Hasn't Ended
  8.       $POLL_SQL .= "AND B.StartTime > 0 ";//Ballot Started
  9.       $POLL_SQL .= "AND Q.parent_ballot_id = B.id ";
  10.       $POLL_SQL .= "ORDER BY RAND() LIMIT 0,1";
  11.  
  12.       if($POLL_RESULT = $db->query($POLL_SQL))
  13.       {
  14.        while($POLL_DATA = $POLL_RESULT->fetch_array())
  15.        {
  16.        $template->assign_block_vars('side_table.site_poll',array(
  17.        'QUESTION_ID' => intval($POLL_DATA['question_id']),
  18.        'QUESTION' => DBStringExtract($POLL_DATA['question'])
  19.        ));
  20.          $ANSWERS_SQL = "SELECT ";
  21.          $ANSWERS_SQL .= "id, parent_question_id, answer ";
  22.          $ANSWERS_SQL .= "FROM votingpolls_answers ";
  23.          $ANSWERS_SQL .= "WHERE parent_question_id = ".intval($POLL_DATA['question_id'])." ";
  24.          $ANSWERS_SQL .= "ORDER BY RAND()";
  25.  
  26.          if($ANSWERS_RESULT = $db->query($ANSWERS_SQL))
  27.          {
  28.           while($ANSWERS_DATA = $ANSWERS_RESULT->fetch_array())
  29.           {
  30.             $template->assign_block_vars('side_table.site_poll.answer',array(
  31.             'ANSWER_ID' => intval($ANSWERS_DATA['id']),
  32.             'ANSWER' => DBStringExtract($ANSWERS_DATA['answer'])
  33.             ));
  34.           }
  35.          }
  36.  
  37.        break;
  38.        }
  39.       }
  40. ?>


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
  • Anonymous
  • Bot
  • No Avatar
  • Inscription: 25 Feb 2008
  • Messages: ?
  • Loc: Ozzuland
  • Status: Online

Message Juillet 11th, 2010, 7:14 am

  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Inscription: Fév 10, 2004
  • Messages: 13455
  • Loc: Florida
  • Status: Offline

Message Juillet 11th, 2010, 7:22 pm

La première chose qui vient à l'esprit est d'utiliser une requête qui sera de retour tout ce que vous avez de le retourner dès maintenant, et en outre, le nombre de voix chaque élément a.

Ensuite, vous pouvez commander par voix ASC, peut-être limiter à 3-5, puis à choisir un élément aléatoire de cette petite série en utilisant PHP. Elle devrait vous donner une meilleure répartition des votes de la commande en utilisant RAND ().

Im un peu préoccupé en ce moment, alors je pourrait être fermé.
Strong with this one, the sudo is.

Afficher de l'information

  • Total des messages de ce sujet: 2 messages
  • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 184 invités
  • Vous ne pouvez pas poster de nouveaux sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas éditer vos messages
  • Vous ne pouvez pas supprimer vos messages
  • Vous ne pouvez pas joindre des fichiers
 
 

© 2011 Unmelted, LLC. Ozzu® est une marque déposée de Unmelted, LLC