迭代PHP-MySQL中结果资源的子部分

时间:2012-08-18 14:30:53

标签: php mysql

在我的程序中,我启动一个SQL查询并获取结果资源。然后,我使用mysql_fetch_array()函数遍历此结果资源的行,并使用每行的字段内容构造另一个SQL查询。

启动第二个查询的结果是我想要的第一组结果。但是,由于这样做的结果数量不多,我想通过删除用于进行查询的最后一条记录来降低搜索的具体性。

e.g。产生我想要的第一组结果的查询可以是:

 SELECT uid FROM users WHERE (gender=male AND relationship_status=single 
AND shoe_size=10)

然后我想删除最后一条记录,以便我的查询成为:

SELECT uid FROM users WHERE (gender=male AND relationship_status=single)

我已经编写了代码来生成第一个查询,但正如我上面提到的,我使用mysql_fetch_array函数迭代所有记录。在随后的“回合”中,我只想连续遍历较少的记录,以便我的查询不那么具体。我怎么能这样做?

这似乎也是一种非常低效的方法 - 所以我欢迎任何可能使其更有效的简单想法。

编辑:感谢您的回复 - 是的,我实际上在我的计划中这样做。我基本上试图通过获取用户在数据库中指定的所有首选项并使用它来形成查询以查找具有这些首选项的人来实现基本搜索算法。因此,第一次使用所有条件进行搜索,然后在连续尝试时使用少一个标准进行搜索,并否定先前返回的用户ID。目前我正在为每个“回合”从头开始构建查询,但我想找到一种方法,我可以使用上一个查询来做到这一点

1 个答案:

答案 0 :(得分:0)

使用上述查询,您可以:

SELECT uid 
FROM users 
WHERE uid NOT IN (
        SELECT uid 
        FROM users 
        WHERE 
        (gender=male 
        AND relationship_status=single 
        AND shoe_size=10)
        )

这实际上会将您的第一个查询转换为子查询,并使用它来否定返回的结果。即,它将返回所有行,而不是在第一个查询中。