0

在我的程序中,我启动一个 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。目前我正在为每个“回合”从头构建查询,但我想找到一种方法可以使用最后一个查询来做到这一点

4

1 回答 1

0

使用上面的查询,您可以执行以下操作:

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

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

于 2012-08-18T14:35:09.080 回答