我对SELECT查询有些困难,应该相当容易。这是简化的背景:
我的数据库中有两个表。一个名为TABLE1的表包含三个字段:[QuestionID],[Question],[Answer]。第二个表名为TABLE2,包含两个字段:[UserID]和[QuestionID]。
基本上,页面的功能是当用户正确回答问题时,用户名和问题ID将插入到TABLE2中。 TABLE2将用于省略页面中已回答的问题,以便用户只能回答未回答的问题。
因此,SELECT查询应该通过'在 TABLE1 中显示 NOT IN 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语句显示的内容)。
所以我知道我做错了什么?
谢谢!
答案 0 :(得分:1)
为什么不使用连接,我想知道?
SELECT t2.QuestionID
FROM table2 t2
INNER JOIN table1 t1 ON t1.QuestionID = t2.QuestionID
WHERE t2.Username = 'TESTING'
使用此查询,您将从结果行集中有效地排除table2
中没有相应行的所有table1
条记录。
答案 1 :(得分:1)
Please, don't use mysql_*
functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDO或MySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial。
您需要了解如何使用JOIN
。我也不确定你是如何使用username
的。此查询将显示TABLE1
中不在TABLE2
内的所有问题。
SELECT a.QuestionID
FROM TABLE1 a
LEFT JOIN TABLE2 b ON b.QuestionID = a.QuestionID
WHERE b.QuestionID IS NULL
答案 2 :(得分: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
答案 3 :(得分:0)
不要将QuestionID
放在引号中!否则,MySQL将检查'QuestionID'
中的字面值TABLE2
,而不是列值。