1

我在使用 SELECT 查询时遇到了一些困难,这应该很容易。这是简化的背景:

我的数据库中有两个表。一个名为 TABLE1 的表包含三个字段:[QuestionID]、[Question]、[Answer]。第二个表名为 TABLE2,包含两个字段:[UserID] 和 [QuestionID]。

基本上,页面的功能是当用户正确回答问题时,用户名和问题 ID 将插入到 TABLE2 中。TABLE2 将用于从页面中省略已回答的问题,以便用户只能回答尚未回答的问题。

因此,SELECT 查询应该通过“显示TABLE1不在 TABLE2中的所有问题”来工作。这听起来很容易,但我无法弄清楚。

这是我的查询:

 $answered = mysql_query("SELECT QuestionID FROM TABLE2 WHERE Username='TESTING'");
 while ($answered1 = mysql_fetch_array($answered)) 
 {
 $QuestionsToDisplay = mysql_query("SELECT * FROM TABLE1 WHERE 'QuestionID' NOT IN ('$answered1')");
 }
 }

我也试过:

$QuestionsToDisplay = mysql_query("SELECT * FROM TABLE1 WHERE 'QuestionID' !='$answered1'");

两个实例在应该显示 4 时都显示一个结果。

我将第一个查询放在“while”语句中,因为它返回了正确的数据(我在 TABLE2 中有两个条目用于测试目的,这就是 echo 语句显示的内容)。

所以知道我做错了什么吗?

谢谢!!

4

4 回答 4

1

为什么不只使用连接,我想知道?

    SELECT t2.QuestionID 
      FROM table2 t2 
INNER JOIN table1 t1 ON t1.QuestionID = t2.QuestionID
     WHERE t2.Username = 'TESTING'

使用此查询,您将有效地从结果行集中排除所有table2没有相应行的记录。table1

于 2012-12-24T21:37:45.287 回答
1

请不要mysql_*在新代码中使用函数。它们不再被维护并被正式弃用。看到红框了吗?改为了解准备好的语句,并使用PDOMySQLi -本文将帮助您决定使用哪个。如果您选择 PDO,这里有一个很好的教程

您需要学习如何使用JOIN. 我也不确定你是如何使用username. 此查询将显示所有TABLE1不在的问题TABLE2

SELECT a.QuestionID
FROM TABLE1 a
LEFT JOIN TABLE2 b ON b.QuestionID = a.QuestionID
WHERE b.QuestionID IS NULL

看到它在行动

于 2012-12-24T21:39:59.680 回答
1

我认为您应该考虑使用LEFT JOIN

SELECT t1.* 
FROM TABLE1 t1
LEFT JOIN TABLE2 t2
    ON t1.QuestionID = t2.QuestionID
    AND T2.Username = 'TESTING'
WHERE t2.QuestionId is null

这将返回Table1其中没有相应记录的所有内容Table2

于 2012-12-24T21:42:01.813 回答
0

不要QuestionID加引号!否则 MySQL 将检查 中的文字值'QuestionID'TABLE2而不是列值。

于 2012-12-24T21:37:30.733 回答