MySQL / Classic ASP - 使用LIMIT进行分页

时间:2011-09-18 16:31:34

标签: mysql sql database asp-classic

我的构建遇到了问题。

我使用了一种非常古老的记录集分页方法,它没有使用LIMIT方法。我现在已经使用了LIMIT方法,它极大地加速了我的页面...但它影响了我页面的另一部分,我很确定如何绕过它。

之前,我会运行这样的查询(仅限示例):

SELECT photoID FROM photoSearch WHERE country = 'London'

即使此查询现在返回来自伦敦的69,000多张照片,我也会将所有这些结果(photoID INT INDEX,userID INT INDEX)写入表格(searchResults),因此结果可能用于页面的其他部分。所以我有这个:

While NOT rs.EOF
INSERT INTO searchResults (photoID, userID) VALUES ("&photoID&","&userID&")
rs.MoveNext
Wend

好的,现在进一步进入我的页面,我想要显示照片中的人员列表,以及计数,这些是所有刚存储的结果。这使我的用户可以将结果缩小到更具体的范围。例如,有人可以搜索“金球奖”,照片返回,他们可以看到金球奖的人员名单,如布拉德·皮特(8,374),安吉丽娜·朱莉(7,321)等等。所以我有这个查询就是这样:

SELECT COUNT(*) AS totalPeople, people FROM people
INNER JOIN photopeople ON photoPeople.peopleID = people.PeopleID
INNER JOIN searchPhotoResults ON photopeople.photoid  = searchPhotoResults.photoID
GROUP BY people
ORDER BY totalPeople DESC
LIMIT 5

但是现在,因为我的数据库在去年增长了,我对“伦敦”的搜索可能会返回69,000行,因此搜索行并将行写入结果表需要一点时间。所以我被建议使用LIMIT分页,而不是返回69,000行,它只返回该页面所需的数量,如20。

我现在已经改变了我的页面以使用LIMIT,但是你可能已经解决了,我已经失去了参加该事件的人名列表的功能。而不是布拉德皮特(8,374),现在是布拉德皮特(20)和安吉丽娜朱莉(20)......这是不好的。

所以这就是我的困境,我希望(需要)使用LIMIT来加速我的页面,但它会删除人们的名字列表,这也是我真正想要的。如果我不使用LIMIT,我的搜索对于更常见的单词来说太慢了 - 似乎我无法获胜!

有没有人可以告诉我如何解决这个问题?我希望我解释得很好......

1 个答案:

答案 0 :(得分:0)

我认为您只需要将原始WHERE子句放在“faceting”查询中,而不是使用临时表:

SELECT COUNT(*) AS totalPeople, people FROM people
INNER JOIN photopeople ON photoPeople.peopleID = people.PeopleID
INNER JOIN photoSearch ON photopeople.photoid  = photoSearch.photoID
WHERE country = 'London'
GROUP BY people
ORDER BY totalPeople DESC
LIMIT 5