2013-01-15 67 views
1
question table 
======================== 
question_id 
1 
2 
3 
4 


user_answer table 
======================== 
user_id question_id 
33  2 
44  4 
33  1 
44  3 

此代码将返回问题ID(2和1) 什么,我想要的是检索表的问题其他问题的ID,所以我想 的结果是(3,4)SQL左外连接选择不匹配的记录?

$fadi = mysql_query("SELECT * FROM question 
     LEFT OUTER JOIN user_answer 
      ON user_answer.question_id = question.question_id 
       WHERE user_answer.user_id = 33"); 

    Print "<table border cellpadding=3>"; 
    while($info = mysql_fetch_array($fadi)) 
    { Print "<tr>"; 
    Print "<th>question </th> <td>".$info['question_id'] . "</td></tr>"; 
    } Print "</table>"; } 
+0

在您的SQL查询中将33更改为44 – twoleggedhorse

+0

使用mysqli而不是mysql代替新代码。 –

+0

不,我想从问题故事中找回未回答的问题,然后将问题ID添加到用户标识为这样: user_id 33 44 33 44 33 33 question_id 2 4 1 3 3 4 –

回答

1

编辑:改进版本。

$fadi = mysql_query("SELECT * FROM question WHERE question.question_id NOT IN (SELECT user_answer.question_id FROM user_answer WHERE user_answer.user_id = 33)"); 

    Print "<table border cellpadding=3>"; 
    while($info = mysql_fetch_array($fadi)) 
    { Print "<tr>"; 
    Print "<th>question </th> <td>".$info['question_id'] . "</td></tr>"; 
    } Print "</table>"; } 

MySQLi的版本:

$link = mysqli_connect($hostname, $username, $password, $database); 
    if (!$link){ 
    echo('Unable to connect to database'); 
    } 
    else{ 
    $fadi = mysqli_query("SELECT * FROM question WHERE question.question_id NOT IN (SELECT user_answer.question_id FROM user_answer WHERE user_answer.user_id = 33)", $link); 

    Print "<table border cellpadding=3>"; 
    while($info = mysqli_fetch_array($fadi,MYSQL_BOTH)) 
    { Print "<tr>"; 
    Print "<th>question </th> <td>".$info['question_id'] . "</td></tr>"; 
    } Print "</table>"; } 

    } 
    mysqli_close($link); 

见行动:http://www.sqlfiddle.com/#!2/27b6f/21

+0

好吧,但我不能为特定用户做 –

+0

这非常感谢很多@Radical这是工作100% –

2

我相信你在找什么的话来说就是NULL:

$fadi = mysql_query("SELECT * FROM question 
    LEFT OUTER JOIN user_answer 
     ON user_answer.question_id = question.question_id 
      AND user_answer.user_id = 33 
     WHERE user_answer.question_id IS NULL"); 

你可以走一步仅从这个问题表中检索的问题ID:

$fadi = mysql_query("SELECT question.question_id FROM question 
    LEFT OUTER JOIN user_answer 
     ON user_answer.question_id = question.question_id 
      AND user_answer.user_id = 33 
     WHERE user_answer.question_id IS NULL"); 
+0

我同意上面的答案。看到这个在行动:http://www.sqlfiddle.com/#!2/95a0c/2 –

+0

我添加了一个主键到user_answer表,因为你的关键是一个复合关键。 –

+0

+1。是的,反连接模式是一种可行的方法,其索引定义为'ON user_answer(user_id,question_id)'。 – spencer7593

0

可能是什么的答案是把你使用 然后从mysql_fetch_array相同mysql_query检索“question_id的价值观和最后,如果你有问题的计数(如果不是你可以使用mysql计数),使用php函数array_diff()来检索(从增量排序的questi整数值数组on_id或来自'question'表的question_id值数组)

+0

或者,查询可以被修改,以有效地返回指定的结果集,无论哪一个。 – spencer7593