2014-11-14 2 views
0

Я пытался создать систему опроса, которая запускает запросы к базе данных и если она находит совпадение, не включает этот ответ.PHP/MySQL - остановка Foreach Запуск одного и того же запроса

Это система опроса, когда пользователь голосует в опросе, он хранит pollid и userid в таблице базы данных, где затем извлекается, когда они повторно посещают страницу, поэтому опрос, на который они ранее голосовали, не отображается ,

Я попытаюсь изо всех сил объяснить, мне очень трудно понять себя.

В моем опросе (где прошел опрос и пользователь, завершивший опрос) таблица содержит 2 строки и 2 столбца.

Два ряда являются:
pollid
идентификатор пользователя

Две колонны для pollsdone являются (Userid не имеет значения):
26, USERID
76, USERID

SQL:

$sql = "SELECT * FROM Polls"; 
$completedVoteSearch = "SELECT * FROM Pollsdone WHERE userid='10'"; 

Когда я использую:

foreach ($db->query($sql) as $row) { 
    foreach ($db->query($completedVoteSearch) as $done) { 
     if ($done['pollid'] != $row['pollid']) { 
     // CREATE POLL CODE 

Он будет запускать запрос к базе данных и правильно выбрать, какие из них совпадают. Проблема в том, что он также будет выбирать такие, как «44,76», и отобразить опрос «76», хотя это совпадение с «76,76»
Надеюсь, эта фотография поможет вам лучше понять: (Не говорится «Мы есть матч!»и показывает опрос еще)

http://i.stack.imgur.com/NfTLS.png

это все еще показывает опрос, хотя он должен быть скрыт из-за другие запросы, как я идти об остановке этого? Любая помощь будет принята с благодарностью!

Вот код им с помощью (как раз для справки, там не ошибка, это не нужно «отлажена»)

try { 
          $db = new PDO("mysql:host=$mysql_host;dbname=$mysql_db", $mysql_user, $mysql_pass); 
          $sql = "SELECT * FROM Polls"; 
          $completedVoteSearch = "SELECT * FROM Pollsdone WHERE userid='10'"; 

          foreach ($db->query($sql) as $row) { 
           foreach ($db->query($completedVoteSearch) as $done) { 
            if ($done['pollid'] == $row['pollid']) { 
             echo "We have a match!"; 
            } 
            if ($done['pollid'] != $row['pollid']) { 
             echo "<br/>"; 
             echo $done['pollid'] . ", "; 
             echo $row['pollid'] . ", "; 
             echo "<br/>"; 
             $pollid = $row['pollid']; 
             $title = $row['title']; 
             $type = $row['type']; 
              if ($type == "s") { 
               $type = "radio"; 
              } else { 
               $type = "checkbox"; 
              } 

             $option1 = $row['option1']; 
             $option2 = $row['option2']; 
             $option3 = $row['option3']; 
             $option4 = $row['option4']; 
             $option5 = $row['option5']; 
             $option6 = $row['option6']; 

             $option1vote = $row['option1vote']; 
             $option2vote = $row['option2vote']; 
             $option3vote = $row['option3vote']; 
             $option4vote = $row['option4vote']; 
             $option5vote = $row['option5vote']; 
             $option6vote = $row['option6vote']; 

             $option1voteColumn = "option1vote"; 
             $option2voteColumn = "option2vote"; 
             $option3voteColumn = "option3vote"; 
             $option4voteColumn = "option4vote"; 
             $option5voteColumn = "option5vote"; 
             $option6voteColumn = "option6vote"; 
            } 
           } 
          // $isCompleteSQL = "SELECT * FROM Pollsdone WHERE userid='10' "; 
          // if() 

          if (strlen($option3) < 1 && strlen($option2) > 0) { 
           echo '<div class="userPoll"> 
            <div class="pollTitle"> 
             <h3 class="pollHeader">' . $title . ' (ID = ' . $pollid . ')</h3> 
            </div> 
            <div class="pollContent"> 
             <p class="pollSubTitle">Created By <a href="profile.php">Username</a></p> 
             <form class="poll" method="POST" action="mypolls.php"> 
              <label><input type="' . $type . '" class="pollAnswer" name="'. $pollid .'" value="option1vote"><p class="pollAnswerText">' . $option1 . '</p></label><br/> 
              <label><input type="' . $type . '" class="pollAnswer" name="'. $pollid .'" value="option2vote"><p class="pollAnswerText">' . $option2 . '</p></label><br/> 
              <input type="submit" class="pollSubmit btn btn-default"/> 
             </form> 
            </div> 
           </div>'; 

           if ($_POST[$pollid] . $pollid == $option1voteColumn . $pollid) { 
            $option1vote = ($option1vote + 1);       
            $voteSQL = "UPDATE Polls SET ".$option1voteColumn."='".$option1vote."' WHERE pollid='".$pollid."'"; 
            $db->exec($voteSQL); 
           } 
          } 

          if (strlen($option4) < 1 && strlen($option3) > 0) { 
           echo '<div class="userPoll"> 
            <div class="pollTitle"> 
             <h3 class="pollHeader">' . $title . ' (ID = ' . $pollid . ')</h3> 
            </div> 
            <div class="pollContent"> 
             <p class="pollSubTitle">Created By <a href="profile.php">Username</a></p> 
             <form class="poll" method="POST" action="mypolls.php"> 
              <label><input type="' . $type . '" class="pollAnswer" name="'. $pollid .'"><p class="pollAnswerText">' . $option1 . '</p></label><br/> 
              <label><input type="' . $type . '" class="pollAnswer" name="'. $pollid .'"><p class="pollAnswerText">' . $option2 . '</p></label><br/> 
              <label><input type="' . $type . '" class="pollAnswer" name="'. $pollid .'"><p class="pollAnswerText">' . $option3 . '</p></label><br/> 
              <input type="submit" class="pollSubmit btn btn-default"/> 
             </form> 
            </div> 
           </div>'; 
          } 

          if (strlen($option5) < 1 && strlen($option4) > 0) { 
           echo '<div class="userPoll"> 
            <div class="pollTitle"> 
             <h3 class="pollHeader">' . $title . ' (ID = ' . $pollid . ')</h3> 
            </div> 
            <div class="pollContent"> 
             <p class="pollSubTitle">Created By <a href="profile.php">Username</a></p> 
             <form class="poll" method="POST" action="mypolls.php"> 
              <label><input type="' . $type . '" class="pollAnswer" name="'. $pollid .'"><p class="pollAnswerText">' . $option1 . '</p></label><br/> 
              <label><input type="' . $type . '" class="pollAnswer" name="'. $pollid .'"><p class="pollAnswerText">' . $option2 . '</p></label><br/> 
              <label><input type="' . $type . '" class="pollAnswer" name="'. $pollid .'"><p class="pollAnswerText">' . $option3 . '</p></label><br/> 
              <label><input type="' . $type . '" class="pollAnswer" name="'. $pollid .'"><p class="pollAnswerText">' . $option4 . '</p></label><br/> 
              <input type="submit" class="pollSubmit btn btn-default"/> 
             </form> 
            </div> 
           </div>'; 
          } 

          if (strlen($option6) < 1 && strlen($option5) > 0) { 
           echo '<div class="userPoll"> 
            <div class="pollTitle"> 
             <h3 class="pollHeader">' . $title . ' (ID = ' . $pollid . ')</h3> 
            </div> 
            <div class="pollContent"> 
             <p class="pollSubTitle">Created By <a href="profile.php">Username</a></p> 
             <form class="poll" method="POST" action="mypolls.php"> 
              <label><input type="' . $type . '" class="pollAnswer" name="'. $pollid .'"><p class="pollAnswerText">' . $option1 . '</p></label><br/> 
              <label><input type="' . $type . '" class="pollAnswer" name="'. $pollid .'"><p class="pollAnswerText">' . $option2 . '</p></label><br/> 
              <label><input type="' . $type . '" class="pollAnswer" name="'. $pollid .'"><p class="pollAnswerText">' . $option3 . '</p></label><br/> 
              <label><input type="' . $type . '" class="pollAnswer" name="'. $pollid .'"><p class="pollAnswerText">' . $option4 . '</p></label><br/> 
              <label><input type="' . $type . '" class="pollAnswer" name="'. $pollid .'"><p class="pollAnswerText">' . $option5 . '</p></label><br/> 
              <input type="submit" class="pollSubmit btn btn-default"/> 
             </form> 
            </div> 
           </div>'; 
          } 

          if (strlen($option6) > 0) { 
           echo '<div class="userPoll"> 
            <div class="pollTitle"> 
             <h3 class="pollHeader">' . $title . ' (ID = ' . $pollid . ')</h3> 
            </div> 
            <div class="pollContent"> 
             <p class="pollSubTitle">Created By <a href="profile.php">Username</a></p> 
             <form class="poll" method="POST" action="mypolls.php"> 
              <label><input type="' . $type . '" class="pollAnswer" name="'. $pollid .'"><p class="pollAnswerText">' . $option1 . '</p></label><br/> 
              <label><input type="' . $type . '" class="pollAnswer" name="'. $pollid .'"><p class="pollAnswerText">' . $option2 . '</p></label><br/> 
              <label><input type="' . $type . '" class="pollAnswer" name="'. $pollid .'"><p class="pollAnswerText">' . $option3 . '</p></label><br/> 
              <label><input type="' . $type . '" class="pollAnswer" name="'. $pollid .'"><p class="pollAnswerText">' . $option4 . '</p></label><br/> 
              <label><input type="' . $type . '" class="pollAnswer" name="'. $pollid .'"><p class="pollAnswerText">' . $option5 . '</p></label><br/> 
              <label><input type="' . $type . '" class="pollAnswer" name="'. $pollid .'"><p class="pollAnswerText">' . $option6 . '</p></label><br/> 
              <input type="submit" class="pollSubmit btn btn-default"/> 
             </form> 
            </div> 
           </div>'; 
          } 
         }$db = null; 

         } catch(PDOException $e) { 
          $e->getMessage(); 
         } 
+1

Что такое '44,76', что такое' 76,76'? Какова основная цель, которую вы пытаетесь достичь? Не показывать опросы, в которых пользователь уже участвовал? 'select * from Опросы, где pollid NOT IN (выберите pollid from polldone, где user_id = 10)' –

+0

Это может сработать. Я попробую и дам это @U_mulder! –

+0

Затем я получаю сообщение об ошибке «Предупреждение: неверный аргумент, предоставленный foreach() в [..loc ..] в строке 70». Foreach: 'foreach ($ db-> query ($ sql) в виде $ row) 'с SQL-выражением:' $ sql = "SELECT * FROM Опросы WHERE pollid NOT IN (SELECT pollid FROM Interviewdone WHERE userid = 10)"; ' –

ответ

0

Так что, если я вас правильно, вы пытаетесь выберите опросы, которые пользователь еще не участвовал. Вы можете использовать этот запрос:

select * from `polls_table` 
where `pollid` NOT IN 
    (select `pollid` from `pollsdone` 
    where `user_id` = 10) 
Смежные вопросы