如何使用已经使用过的id的数组中不存在的id返回MySQL结果?

时间:2012-02-24 04:13:13

标签: php mysql arrays

我正在创建一个基于网络的阅读测试。学生会收到一个随机的阅读段落,一旦他们回答了问题,就会将段落ID和他们的学生ID放在一个表格中,该表格跟踪他们使用过的段落。

我需要返回尚未使用过的段落的id。我一直在尝试使用MySQL的NOT IN功能。

$newpassage = "SELECT passName 
               FROM passages 
               WHERE passid NOT IN ('$passidarray');";

$ passidarray是包含已使用的段落的ID的数组。但每次,它仍然会返回已经使用过的段落ID。我对这些数字进行了硬编码,看它是否有效。但是他们使用的段落增加了他们使用测试的次数越多。

例如,如果有三个段落并且它们只使用了1,则结果应该返回2和3,但它返回1,2和3.然后一旦它们使用2,它应该只返回但它正在归还所有这些。有什么东西我做错了。任何帮助都会受到高度赞赏,甚至是更好的方式。

2 个答案:

答案 0 :(得分:1)

SQL不使用php的数组对象格式。尝试:

$newpassage = "SELECT passName FROM passages WHERE passid NOT IN (" . implode(',', $passidarray) . ");";

答案 1 :(得分:0)

SELECT passName FROM passages WHERE passid NOT IN ('$passidarray')

你不能只是将一个数组嵌入到这样的字符串中。您需要将值数组转换为MySQL可以理解的字符串。例如,如果$passidarray

array(1, 2, 3, 4)

您必须将implode()数组放入逗号分隔的字符串中。

$passidstring = implode(',', $passidarray);
$newpassage = "SELECT passName FROM passages WHERE passid NOT IN ($passidstring);";