2017-03-03 5 views
0

私はmysqliを使用して、「ユーザー」が回答した「質問」の配列を取得しようとしています。私はこれを達成するためにquestions_usersテーブルを持っています。ユーザーを探して、答えたすべての質問を取得し、IDの配列を作成するために次のコードを使用していますので、これらの質問を新しい答える質問。mysqli_fetch_assoc()でIDの配列を作成する

$qusAnswered = array(); 
$DoWeHaveUsersql = "SELECT * FROM users WHERE `checkid`=".$checkid; 
$DoWeHaveUserresult = $conn->query($DoWeHaveUsersql); 


if ($DoWeHaveUserresult->num_rows > 0) {//we've got a user 
    $row = mysqli_fetch_assoc($DoWeHaveUserresult); 

    $userId = $row['id']; 
    $checkQuestionSql = "SELECT * FROM questions_users WHERE `user_id`=".$userId;//get all the questions_users records 

    $checkQuresult = mysqli_query($conn, $checkQuestionSql); 

    if (mysqli_num_rows($checkQuresult) > 0) { 
     // make an array of all the id's of questions answered 
     while($Qu = mysqli_fetch_assoc($checkQuresult)) { 
      $qusAnswered[] = $Qu['question_id']; 
     } 
    } 
    $newQuestionSql = "SELECT * FROM questions WHERE id NOT IN (".implode(',', $qusAnswered).") LIMIT 1"; 
} 

問題は、私が$ qusAnswered配列を作成しているときです。データベースの内容から、値3のみが含まれている必要があります。なぜなら、回答した質問のIDが正しいからです。 $ qusAnsweredが実際に

array('1','2'); 

のように見えるいくつかの理由で、私は私が間違ってやっているかわからないんだけど、誰が私のために明白なことを指摘することができれば、私はそれを感謝します。変数$ newQuestionSqlであるSQLがどのように見える

SELECT * FROM questions WHERE id NOT IN (1,2) LIMIT 1 

それは次のようになります。

SELECT * FROM questions WHERE id NOT IN (3) LIMIT 1 
+0

直接クエリで変数を入れないでください、あなたの問題を解決することがございます。 [prepared statements](http://php.net/manual/en/mysqli.prepare.php) – Swellar

+1

を使用するこれは、単一の結合クエリで実行できます。 – miken32

+0

質問は私にはうまく見えますが、私はあなたの考えを表には含んでいないと思います。クエリを手で実行するとどうなりますか? – Barmar

答えて

0

まあ-FUに参加し、私は私が思ったほど良くはありませんが、ここでの方法です1つのクエリ、およびwithout opening yourself to SQL injection attacksでこれを行うには:

$query = "SELECT * FROM questions WHERE question_id NOT IN (
    SELECT question_id FROM questions_users WHERE user_id=? 
);" 
$userid = $_GET["user_id"]; 
$stmt = $conn->prepare($query); 
$stmt->bind_param("i", $userid); 
$stmt->execute(); 
$result = $stmt->get_result(); 
$rows = $result->fetch_all(MYSQLI_ASSOC); 
foreach ($rows as $row) { 
    //do stuff with $row 
} 
0

私はあなただけの単純なものQUERを提案したいと思いますy。

は、それが

SELECT * from questions where id IN (SELECT GROUP_CONCAT(question_id) FROM `questions_users` WHERE `user_id`=1) 
関連する問題