在我的程序中,我启动一个SQL查询并返回一个结果资源。然后,我使用mysql_fetch_array()函数迭代该结果资源的行,并使用每行字段的内容来构造另一个SQL查询。
启动第二个查询的结果是我想要的第一组结果。然而,由于这样做产生的结果数量不多,我想通过删除用于进行查询的最后一条记录来减少搜索的具体性。
例如,产生我想要的第一组结果的查询可能是:
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。目前,我正在为每个"回合"从头开始构建查询,但我想找到一种方法,使用最后一个查询
使用上面的查询,您可以执行:
SELECT uid
FROM users
WHERE uid NOT IN (
SELECT uid
FROM users
WHERE
(gender=male
AND relationship_status=single
AND shoe_size=10)
)
这将把您的第一个查询变成一个子查询,并使用它来否定返回的结果。即,它将返回所有行,而不是在第一个查询中。